Emacs缩进级别全局覆盖

时间:2011-07-27 19:49:18

标签: emacs elisp indentation emacs23

我想将缩进模式设置为仅限制表符,任何模式的宽度均为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


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

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

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

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

3 个答案:

答案 0 :(得分:6)

Emacs中的缩进并不是一件“琐碎的事”。您可以在Emacs Wiki上阅读所有相关内容:
http://www.emacswiki.org/emacs/CategoryIndentation

任何主要模式都可以自由地实现缩进,但是如你所知,其中有几个引入了与缩进相关的变量;所以不,没有全局缩进配置可以保证影响每个可能的主要模式(虽然在实践中,某些变量 完全符合惯例)。

  

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

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

正如您所做的那样,使用setqsetq-default设置初始文件中的值(或自动缓冲区局部变量的默认值)也没关系。

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

e.g:

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

答案 1 :(得分:5)

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

至于使用制表符而不是空格进行缩进,您只需将indent-tabs-mode设置为t即可。它可以用同样的方式定制。

答案 2 :(得分:1)

Get (Inventory::Type) If (Contacts::Measurement 1 is between Inventory::Meas1Min & Inventory::Meas1Max ) End If 在emacs 24中为我工作

相关问题