使用选项卡的Emacs缩进


8

有没有一种方法可以使全局仅使用制表符而不使用空格来使Emacs缩进代码。我知道tabify命令。我希望自动缩进使用制表符,而不是像默认配置那样使用制表符和空格的混合。

Answers:


7

好吧,要缩进制表符,您需要确保它indent-tabs-modet(这是默认值)。但是,获取制表符,您需要调整进行缩进的模式,以使每行缩进您的倍数tab-width(默认为8)。例如,在C模式下,您可以尝试设置c-basic-offset为8。

或者,您可以将tab-width值减小到较小的值,这样Emacs不需要使用空格来达到每个缩进级别。但是,如果这样做,那么其他不得不处理您的代码(并使用标准的8个字符的制表位)的其他人都会感到烦恼。

我敦促您重新考虑。就个人而言,我发现使用制表符缩进的代码很烦人,尤其是当它们看起来不是8个空格制表符时。(最糟糕的是代码,其中某些行使用空格,某些行使用制表符,而显然不是8个空格制表符。)请大家帮个忙,公正(setq indent-tabs-mode nil)


我会将此问题标记为第二个paragragh设置选项卡的宽度,并且注释不会混淆选项卡和空格。但是,如果设置了标签宽度,则对于每个级别的标签而不是多个空格,缩进编辑要容易得多
user151019 2011年

我认为您的第三段通常很有帮助,但通常我们无法控制原始作者的缩进样式,例如,我们向其提交拉/合并请求。我有我的偏好,他们有他们的偏好。我认为将其缩进样式使用到合理水平很尊重的,因此有时选择不是我们的选择
r2evans

7

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))))

1

标签让我很烦,但是我不得不弄清楚如何使emacs仅使用标签来缩进,这样我才能处理其他人的代码。这对我有用:

(defun tmp/change-indent ()
  (interactive)
  (setq indent-tabs-mode t)
  (setq tab-width 2))

我注意到在弄乱任何东西之前,当我按下Tab键时,它会自动缩进2列。设置“制表符宽度”以匹配2列偏移量允许emacs在进行自动格式化时使用制表符。我当时在nxml模式下工作,但是我认为这应该适用于任何模式。


真好 这也困扰着我。必须设置制表符宽度以匹配列偏移是不直观的。辛苦了 我在c ++模式下使用过这个想法
肖恩·林奇
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.