Answers:
好吧,要缩进制表符,您需要确保它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)
但是,与其他具有不同首选项的人协作时,请确保不要使用这些设置。特别是,使用制表符会使您成为敌人。如果要将特定文件保留为特定样式,则可以使用文件变量来确保在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))))
标签让我很烦,但是我不得不弄清楚如何使emacs仅使用标签来缩进,这样我才能处理其他人的代码。这对我有用:
(defun tmp/change-indent ()
(interactive)
(setq indent-tabs-mode t)
(setq tab-width 2))
我注意到在弄乱任何东西之前,当我按下Tab键时,它会自动缩进2列。设置“制表符宽度”以匹配2列偏移量允许emacs在进行自动格式化时使用制表符。我当时在nxml模式下工作,但是我认为这应该适用于任何模式。