有没有办法让 Emacs 只使用全局制表符而不是空格来缩进代码。我知道 tabify 命令。我更喜欢自动缩进使用制表符,而不是像默认配置那样混合使用制表符和空格。
好吧,要使用制表符缩进,您需要确保indent-tabs-mode
是t
(这是默认值)。但是要仅获取选项卡,您需要调整进行缩进的模式,以便每一行都缩进您的倍数tab-width
(默认为 8)。例如,在 C 模式下,您可以尝试设置c-basic-offset
为 8。
或者,你可以减少你的 tab-width
的值到一个较小的值,这样 Emacs 就不需要使用空格来达到每个缩进级别。但是如果你这样做,其他所有必须处理你的代码(并使用标准的 8 字符制表位)的人都会生气。
我敦促你重新考虑。就我个人而言,我发现使用制表符缩进的代码很烦人,尤其是当它们看起来不是 8 个空格制表符时。(最糟糕的是代码中有些行使用空格,有些行使用制表符,显然不是 8 个空格制表符。)帮我们一个忙,只是(setq indent-tabs-mode nil)
.
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)
Run Code Online (Sandbox Code Playgroud)
但是,请确保在与具有不同偏好的其他人协作时不要使用这些设置。特别是,使用标签会让你成为敌人。如果要以特定样式保存特定文件,您可以使用文件变量来确保在 Emacs 中编辑该文件的每个人都使用相同的设置:
/*
* Local Variables:
* c-file-style: "linux"
* indent-tabs-mode: t
* tab-width: 8
* End:
*/
Run Code Online (Sandbox Code Playgroud)
如果您有一个包含类似缩进 C 文件的整个项目,请使用目录变量而不是污染每个文件。创建一个名为的文件.dir-locals.el
,内容如下:
((c-mode . ((c-file-style . "linux")
(indent-tabs-mode . t)
(tab-width . 8))))
Run Code Online (Sandbox Code Playgroud)