我需要能够为以下文件类型设置标签设置:
我尝试过以下操作,但似乎都没有改变每种文件类型的默认标签设置。
;; js-mode-hook has also been tried
(add-hook 'javascript-mode-hook
'(lambda()
(setq tab-width 4)))
(add-hook 'css-mode-hook
'(lambda()
(setq tab-width 4)))
(add-hook 'html-mode-hook
'(lambda()
(setq tab-width 8)))
我对emacs很陌生,所以我的配置知识非常低。
答案 0 :(得分:28)
在emacs中,每种模式都有自己的缩进样式。缩进的主要命令(绑定到 TAB )是indent-for-tab-command
。
此命令调用变量indent-line-function
中的模式特定缩进函数。因此,每种模式都有自己的方式。
对于Ruby(我的emacs 2是默认值):
(setq ruby-indent-level 2)
对于CSS(同样,默认值为4):
(setq css-indent-offset 4)
不幸的是,SGML模式(HTML模式所基于的)具有非常简单的缩进机制,显然该级别是不可配置的。
请参阅sgml-calculate-indent
函数的源代码。
我个人觉得很奇怪。我不是在写HTML,但您可以尝试自己修改sgml-calculate-indent
函数:)。学习一些口齿不清。
我正在使用js2模式,默认情况下它会完美缩进。对于js,你必须搜索js-indent-level或类似的东西。
干杯。
答案 1 :(得分:7)
有关Emacs如何进行缩进的许多方面。设置选项卡宽度仅指定插入文字选项卡时选项卡的大小。如果您不希望使用文字标签进行缩进,则应首先禁用其插入(from the manual ):
Emacs通常使用两个标签和 缩进行的空格。如果你更喜欢, 所有缩进都可以来自 仅限空间。要请求此项,请设置 indent-tabs-mode为nil。这是一个 每缓冲区变量,所以改变 变量仅影响当前 缓冲区,但有一个默认值 你也可以改变。你也可以改变。
但是,要指定缩进级别,您还需要设置c-basic-offset value变量:
(add-hook 'html-mode-hook
'(lambda()
(setq c-basic-offset 4)
(setq indent-tabs-mode nil))
在您的情况下,您可能只需要c-basic-offset但尝试一些组合,看看效果最好。
答案 2 :(得分:6)
js-mode使用js-indent-level
所以把(setq js-indent-level 4)
放到〜/ .emacs中(不应该在钩子里,甚至,但如果你想知道,那就是js-mode-钩子,而不是javascript-mode-hook)。
如果设置tab-width不会更改某个模式的缩进级别,那么打开该模式的源通常最简单。我通过C-h f js-mode
找到了这个变量,点击链接“js.el”,然后搜索“缩进”,从顶部开始第二次点击。
但是,如果您与其他人合作很多,最好将Cookie放在文件的顶部。我通常在文件中做// -*- tab-width: 8 -*-
,然后我的〜/ .emacs中有这样的东西:
(defvaralias 'c-basic-offset 'tab-width)
(defvaralias 'cperl-indent-level 'tab-width)
(defvaralias 'perl-indent-level 'tab-width)
(defvaralias 'js-indent-level 'tab-width)
这样我就可以处理更少的变量(并且不必获得有关文件局部变量不安全的警告,或者如果模式写入者忘记将其声明为安全的话,则不需要警告)
答案 3 :(得分:0)
如果您正在使用带有emacs 23.1.1的ELPA&#css-mode.el,则可以通过执行以下操作来参数化选项卡宽度的CSS文件的选项卡宽度的全局设置: 1)输入M-x customize-variable, 2)然后键入css-indent-level, 3)然后在根据自己的喜好更改变量后,执行"保存以备将来的会话"。
答案 4 :(得分:0)
对于HTML和erb:如果您使用的是web-mode
(Spacemacs提供的模式),它可以很简单:
(setq-default
web-mode-code-indent-offset 2
web-mode-markup-indent-offset 2)
其中markup-indent-offset
表示实际标记,code-indent-offset
表示ERB中的嵌入式Ruby等。