有没有办法让 Emacs 全局仅使用制表符而不是空格来缩进代码。我知道 tabify 命令。我更喜欢自动缩进使用制表符,而不是像默认配置那样混合使用制表符和空格。
答案1
好吧,要使用制表符缩进,您需要确保它indent-tabs-mode
是t
(这是默认值)。但要得到仅有的选项卡,您需要调整进行缩进的模式,以便每行缩进的倍数tab-width
(默认 8)。例如,在C模式下,您可以尝试设置c-basic-offset
为8。
或者,您可以将 减小tab-width
到更小的值,以便 Emacs 不需要使用空格来达到每个缩进级别。但如果您这样做,所有其他必须处理您的代码(并使用标准 8 字符制表位)的人都会感到恼火。
我敦促你重新考虑。就我个人而言,我发现处理带有制表符缩进的代码很烦人,特别是如果它们看起来不是 8 个空格制表符的话。 (最糟糕的是代码中有些行使用空格,有些行使用制表符,而且显然不是 8 个空格制表符。)请帮我们大家一个忙,只是(setq indent-tabs-mode nil)
.
答案2
Emacs 附带了几种预定义的 C 缩进样式,或者您也可以写你自己的如果没有一个适合您的需求。其中标准款式,看来您正在寻找linux
(Linux内核源代码中使用的样式),它具有8列缩进并使用宽度为8的制表符。
您可以将这些设置设置为 C 的默认样式,方法是将其放入您的.emacs
:
(setq c-default-style "linux")
(defun my-c-mode-hook ()
(setq indent-tabs-mode t)
(setq tab-width 8))
(add-hook 'c-mode-hook 'my-c-mode-hook)
不过,请确保在与具有不同偏好的其他人协作时不使用这些设置。特别是,使用制表符会让你们成为敌人。如果要以特定样式保存特定文件,您可以使用文件变量确保在 Emacs 中编辑文件的每个人都使用相同的设置:
/*
* Local Variables:
* c-file-style: "linux"
* indent-tabs-mode: t
* tab-width: 8
* End:
*/
如果您的整个项目具有类似缩进的 C 文件,请使用目录变量而不是污染每个文件。创建一个名为的文件,.dir-locals.el
其内容如下:
((c-mode . ((c-file-style . "linux")
(indent-tabs-mode . t)
(tab-width . 8))))
答案3
制表符让我很烦恼,但我必须弄清楚如何让 emacs 仅使用制表符进行缩进,以便我可以处理别人的代码。这对我有用:
(defun tmp/change-indent ()
(interactive)
(setq indent-tabs-mode t)
(setq tab-width 2))
我注意到,在搞乱任何事情之前,当我按下 Tab 键时,它会自动缩进 2 列。设置“tab-width”以匹配 2 列偏移量允许 emacs 在执行自动格式时使用制表符。我当时在 nxml 模式下工作,但我认为这应该适用于任何模式。