【问题标题】:Why does emacs display tabs differently?为什么 emacs 显示选项卡的方式不同?
【发布时间】:2014-09-18 09:58:27
【问题描述】:

所以我听说过 emacs 的优点,并且最近才开始使用它。如果这是一个愚蠢的问题,请原谅我,但为什么 emacs 以不同的方式显示选项卡?似乎它使空格数增加了一倍,但至少我猜不是。这里有一些图片来描述我在说什么:

这就是它在 emacs 中的样子:

正如我之前所说,它似乎使空格数增加了一倍。当我将此行添加到 .emacs 时:

(setq c-basic-offset 4)

并使用 Cx h CM-\ 重新缩进代码使其在 emacs 中看起来很正常,但在其他文本编辑器中查看时,二级缩进与第一个缩进一致(如 2 个标签现在是 1 个标签),并且再次,我不明白为什么。将其更改为

(setq c-basic-offset 8)

使它在其他文本编辑器中正常保存和显示。在这一点上,我真的,真的很困惑。

有人能解释一下原因吗?谢谢。

【问题讨论】:

  • 我一直点击这个想法,这将是关于为什么 Emacs file 选项卡与 Vims 不同。 (在人们试图让一个人表现得像另一个人的悠久传统中。)

标签: emacs whitespace highlight indentation


【解决方案1】:

变量tab-width 是列中制表符空格之间的距离,默认为8。如果您希望它默认为4,可以(setq-default tab-width 4)。如果您想取消所有内容并将制表符转换为空格,可以使用M-: (untabify (point-min) (point-max))

您可能会发现this thread 很有帮助,尤其是当您想添加自己的标签时,tab-stop-list 上的要点。

【讨论】:

  • 谢谢!有效。我刚刚意识到我混淆了 setq 和 setq-default,因为我在从 EmacsWiki 复制时错误地只输入了 setq。但这仅适用于c模式吗?再次感谢!
  • 它适用于任何使用制表符的缓冲区。如果你真的想要,你可以为每个缓冲区设置不同的选项卡宽度。如需更多信息,请尝试C-h v tab-width
  • 是否有 c-mode 特定选项?
  • 你的意思是只在c模式下设置一个特定的值吗?你可以先 (defun my-c-hook () (setq tab-width 4)) 然后 (add-hook 'c-mode-hook 'my-c-hook) 在 c 模式下使用 4 列选项卡。
【解决方案2】:

您也可以保持理智,在代码中不使用 TAB 字符。 ;-)

防止插入 TAB 字符,当您点击TAB 键(以及RETC-j,取决于您的Emacs 版本)设置选项的值indent-tabs-mode nil

要从您正在编辑的代码中删除预先存在的 TAB 字符,请使用命令 untabify

另请参阅Tabs Are EvilUntabify Upon Save

请注意,在 Emacs 中,是否使用 TAB 字符与代码缩进的数量和是否缩进无关。例如,选项c-basic-offset 控制缩进量,而不管TAB 是否用于某些缩进。

还要注意,在您改掉 TAB 习惯后,代码中留下的任何对代码有意义的 TAB 字符都更容易找到。它们不会迷失在无意义的空白 TAB 的海洋中。

最后,请注意,有多种方法可以突出显示 TAB 字符。库highlight-chars.el 中的命令hc-toggle-highlight-tabs 是一种方法。见Show Whitespace

【讨论】:

  • 不知道使用制表符不好 :O 只是我一直在使用 Sublime Text,默认情况下当我按回车时它会自动插入制表符,以前从来没有打扰过我.谢谢你启发我!很遗憾我仍然无法投票。不过,我真的不明白你的最后一部分。抱歉,我对此还是有点陌生​​。
  • 抱歉,我不能再编辑我的评论了。我的意思是我不理解 c-basic-offset 的部分。
  • 这并不是说使用 TAB 字符不好。这是我们中的一些人不喜欢使用它们。有些人更喜欢使用它们。这就是为什么 Emacs 有一个选项,indent-tabs-mode,让你决定。
  • c-basic-offset 的要点是,无论您使用 (a) TAB 字符加 SPC 字符还是 (b) 仅使用 SPC 字符进行缩进,缩进的视觉结果都是一样的:代码缩进到相同的列等。并且由于在 Emacs 中,点击 TAB(或 RETC-j,取决于)缩进到正确的列(无论使用哪个空白字符来执行此操作),使用 TAB 的论点chars 意味着比使用 SPC 字符消失更少的按键。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
  • 2017-01-29
  • 2013-12-02
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
相关资源
最近更新 更多