Emacs缩进级别全局覆盖

4

我希望将缩进模式设置为仅制表符,并且对于任何模式都使用4个字符的宽度。这似乎是一个微不足道的事情,但我并没有成功。每种模式似乎都有自己的变量和选项。我尝试过在Perl和R中实现此目标,但没有成功。 以下是未能奏效的方法:

(setq-default tab-width 4)
(setq standard-indent 4)
(setq-default r-indent-level 4)
(setq perl-indent-level 4)

(setq c-basic-offset 4) 只适用于c-mode,其他模式无效。我是不是忘了什么?我设置了错误的变量吗?或者这个选项不存在?

我每天使用多种语言(R、Perl、sh、C/C++等)。由于我喜欢在所有语言中使用相同的缩进,是否有全局覆盖变量,可以设置缩进级别和样式,以便在所有模式下保持一致?如果没有,是否有一种方法可以在启动时为每个模式设置它们?如果一切都失败了,那就必须有一个elisp脚本来实现这一点。

使用Emacs 23


解决方案:我必须单独设置每种模式的变量,因为没有全局覆盖。您可以将以下语句放入您的~/.emacs文件中,在启动时配置emacs。

R模式来自ESS包。通过阅读文档,我发现了这个:(setq ess-indent-level 4)

在CPerl模式下(setq cperl-indent-level 4)

看起来你只需要在每个模式中搜索正确的变量。

3个回答

6
在Emacs中,缩进并不是一个“琐碎的事情”。您可以在Emacs Wiki上阅读有关它的所有内容:http://www.emacswiki.org/emacs/CategoryIndentation
任何主要模式都可以自由实现缩进,如您所见,其中一些引入了与缩进相关的变量;因此,没有全局缩进配置可以保证影响每个可能的主要模式(尽管在实践中,某些变量按照惯例完全标准)。
如果没有,是否有一种方法可以在启动时为每个模式设置它们?
当然。最简单的方法是使用M-x customize RET界面配置值和默认值,尽管只有用defcustom定义的变量才会出现在那里,因此它不一定全面(但即使您不会实际使用它来设置值,它仍然非常有用,可用于浏览一些可用设置)。
在您的init文件中使用setqsetq-default设置值(或默认值,对于自动缓冲区本地变量),也是可以的。
如果您想要更多控制,则可以使用模式挂钩。几乎每个模式在初始化缓冲区后都会运行分配给(mode-name)-hook变量的函数列表,因此任何特定于模式的自定义都可以编写为elisp函数,并添加到适当的挂钩列表中,在您的init文件中。
例如:
(defun my-c-mode-config ()
  (whitespace-mode 1)
  (setq indent-tabs-mode t
        tab-width        4
        c-basic-offset   4))

(add-hook 'c-mode-hook 'my-c-mode-config)

5
使用变量standard-indent。您可以在启动文件中设置它,或自定义它;它在缩进组中。执行M-x customize,然后选择“编辑”,然后选择“缩进”;或者,执行M-x customize-group indent
至于使用制表符而不是空格进行缩进,您只需将indent-tabs-mode设置为t即可。它的自定义方式相同。

1
在Emacs 24中,(setq default-tab-width 2)对我有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接