为什么我的Emacs可能使用空格而不是制表符?

时间:2010-05-21 20:40:52

标签: emacs keyboard-shortcuts code-formatting

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

5 个答案:

答案 0 :(得分:3)

Emacs中的标签和缩进是一个比大多数人预期的要复杂得多的主题。我强烈建议花点时间阅读它 - 从长远来看,几乎可以肯定会让你感到困惑。

Emacs Wiki的以下页面汇集了大部分相关讨论: http://www.emacswiki.org/emacs/CategoryIndentation

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

根据您对该主题的个人意见,TabsAreEvil和SmartTabs配置中的一个或另一个很可能对您有吸引力!

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

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

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

答案 1 :(得分:2)

我弄明白了这个问题。毕竟它插入了一个制表符。事实证明,我认为这不是因为当我按下退格键时,该键被绑定到c-electric-backspace,后者查看设置为c-backspace-function的变量backward-delete-char-untabify,IMO违背了该目的有标签。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

请务必查看文件的第一行。如果你看到类似的东西     // - - tab-width:4;模式:C ++; c-basic-offset:4; indent-tabs-mode:nil - - 此行将覆盖任何全局或模式设置。