Emacs缩进级全局覆盖



我想将缩进模式设置为制表符,任何模式的宽度为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模式。我忘了什么吗?我设置了错误的变量吗?没有这样的选择吗?

我每天使用各种语言(R, Perl, sh, C/c++等)。因为我喜欢在不同的语言中使用相同的缩进,是否有这样一个全局覆盖变量,我可以设置,以便在所有模式中缩进级别和样式是一致的?如果没有,是否有办法在启动时为每种模式设置它们?如果所有这些都失败了,那么必须有一个elisp脚本来执行此操作。

使用Emacs 23


RESOLVED:我必须为每个模式单独设置变量,因为没有这样的全局覆盖。您可以在~/中放入以下语句。在启动时配置Emacs的Emacs文件。

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

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

看起来你只需要在每种模式下搜索正确的变量

Emacs中的缩进并不是一件"微不足道的事情"。您可以在Emacs Wiki上阅读所有相关内容:
http://www.emacswiki.org/emacs/CategoryIndentation

任何主要模式都可以自由地实现缩进,正如你所注意到的,其中一些模式引入了与缩进相关的变量;所以没有,没有全局缩进配置保证影响每一个可能的主要模式(尽管在实践中,某些变量完全标准的约定)。

如果没有,是否有办法在启动时为每种模式设置它们?

当然

。最简单的方法是使用M-x customize RET接口配置值和默认值,尽管只有用defcustom定义的变量出现在那里,所以它不一定是全面的(但它仍然可以非常有用浏览一些可用的设置,即使你不实际使用它来设置值)。

在初始化文件中使用setqsetq-default设置值(或者在自动缓冲本地变量的情况下设置默认值),正如您所做的那样,也可以。

如果你需要更多的控制,你可以使用模式钩子。几乎每个模式都在缓冲区中初始化自身后运行分配给(mode-name)-hook变量的函数列表,因此任何特定于模式的自定义都可以在elisp函数中编写,并添加到适当的钩子列表中,在初始化文件中。

例如:

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

使用变量standard-indent。你可以在启动文件中设置它,或者自定义它;它在缩进组里。执行M-x customize,然后选择编辑,然后缩进;或者,执行M-x customize-group indent

至于用制表符而不是空格缩进,您只需将indent-tabs-mode设置为t即可。

(setq default-tab-width 2) for me in emacs 24

最新更新