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