gow*_*eon 4 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)
Run Code Online (Sandbox Code Playgroud)
(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)
看起来你只需要在每种模式下搜索正确的变量.
Emacs中的缩进并不是一件"琐碎的事情".您可以在Emacs Wiki上阅读所有相关内容:http:
//www.emacswiki.org/emacs/CategoryIndentation
任何主要模式都可以自由地实现缩进,但是正如你所注意到的,它们中的一些引入了与缩进相关的变量; 所以不,没有全局缩进配置可以保证影响每个可能的主要模式(尽管在实践中,某些变量按惯例是完全标准的).
如果没有,有没有办法在启动时为每种模式设置它们?
当然.最简单的方法是使用M-x customize RET界面配置值和默认值,虽然只有变量定义defcustom出现在那里,所以它不一定全面(但它仍然非常有用,可以浏览一些可用的设置,即使你没有实际上用它来设置值).
(在自动缓冲局部变量的情况下或默认)与您的init文件设定值setq和setq-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)
Run Code Online (Sandbox Code Playgroud)
使用变量standard-indent.您可以在启动文件中设置它,也可以自定义它; 它在Indent组中.做M-x customize,然后选择编辑,然后选择缩进; 或者,做M-x customize-group indent.
至于使用制表符而不是空格缩进,您只需将其设置indent-tabs-mode为t.它可以同样的方式定制.