【问题标题】:Why might my Emacs use spaces instead of tabs?为什么我的 Emacs 可能使用空格而不是制表符?
【发布时间】:2011-02-22 13:06:44
【问题描述】:

我正在尝试诊断此问题。 TAB 创建 4 个空格,而不是我想要的 4 col TAB。但我认为不应该,因为有问题的缓冲区上的C-h v indent-tabs-mode 表示它设置为t。当我检查我的键绑定时,TAB 设置为c-indent-line-or-region。这个功能会忽略我的标签模式吗?

【问题讨论】:

  • 请注意,很多人(包括我自己)认为制表符是邪恶的:emacswiki.org/emacs/TabsAreEvil - 您已将制表符宽度从默认的 8 更改为 4。如果我要查看您的代码,则缩进是错误的。此外,您通常喜欢对齐代码的某些部分,即函数参数 - 单独使用制表符是不可能的,您最终会得到制表符和空格的混合。

标签: emacs keyboard-shortcuts code-formatting


【解决方案1】:

检查tab-width 变量。如果它是 8(默认值),那么 Emacs 当然必须插入四个空格,因为选项卡会“太多”。

【讨论】:

  • 原来是8,我刚才改成4了,问题依旧。
【解决方案2】:

检查Emacs "File Local Variables" 的文件。这些特殊格式的行可以在加载该文件时覆盖您的设置。

下面是一段 Ruby 代码底部的示例,强制缩进为 2 个空格,制表符转换为空格:

# Local Variables:
# tab-width: 2
# ruby-indent-level: 2
# indent-tabs-mode: nil
# End:

【讨论】:

    【解决方案3】:

    我发现了问题所在。毕竟它是在插入一个制表符。事实证明,我认为这不是因为当我按退格键时,该键绑定到 c-electric-backspace,它查看变量 c-backspace-function,该变量设置为 backward-delete-char-untabify,IMO 违背了使用制表符的目的。

    【讨论】:

    • 您可能会发现 x-stretch-cursor 变量和空白模式对于直观地识别选项卡很有用。后者在默认情况下可能很花哨,但它可以合理地定制,所以你可能会找到一个合适的配置。
    • +1。如果我早点看到这个答案,我会节省一个小时的生命。
    【解决方案4】:

    Emacs 中的制表符和缩进是一个比大多数人预期的要复杂得多的主题。我强烈建议您花一些时间阅读它——从长远来看,它几乎肯定会为您省去一些困惑。

    Emacs Wiki 上的以下页面将大部分相关讨论集中在一起: http://www.emacswiki.org/emacs/CategoryIndentation

    那里有很多,但值得一看。

    TabsAreEvil 和 SmartTabs 配置中的一种或其他配置很可能会吸引您,顺便说一句,这取决于您对该主题的个人看法!

    确保您阅读了 tab-stop-list 变量上的页面。它隐藏在链接列表的底部附近,但它对于在没有自动缩进规则的情况下理解制表符的行为以及诸如“制表符”之类的内容至关重要。

    标尺模式在这里也很有用。我用文本模式自动启用它:

    ;; Use ruler in text-mode
    (add-hook 'text-mode-hook
              (function (lambda ()
                          (setq ruler-mode-show-tab-stops t)
                          (ruler-mode 1))))
    

    【讨论】:

      【解决方案5】:

      请务必查看文件的第一行。如果你看到类似的东西 // -- 制表符宽度:4;模式:C++; c-基本偏移量:4;缩进制表符模式:无 -- 此行将覆盖任何全局或模式设置。

      【讨论】:

        猜你喜欢
        • 2013-09-29
        • 2011-07-06
        • 2014-03-14
        • 2017-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多