我的emacs设置为全局缩进使用2个空格:
(setq-default indent-tabs-mode nil)
(setq tab-width 2)
(setq js-indent-level 2)
(setq css-indent-offset 2)
但是我想为一个使用4个空格进行缩进的web项目(主要是html,css和js)做贡献。所以我想在项目目录中设置一个.dir-locals.el
文件。该文件具有以下设置(使用add-dir-local-variable
命令添加):
((nil . ((tab-width . 4)
(js-indent-level . 4)))
;;; Directory Local Variables
;;; See Info node `(emacs) Directory Variables' for more information.
((js-mode
(tab-width . 4)))
;;; Directory Local Variables
;;; See Info node `(emacs) Directory Variables' for more information.
((js-mode
(js-indent-level . 4)))
;;; Directory Local Variables
;;; See Info node `(emacs) Directory Variables' for more information.
((html-mode
(tab-width . 4)))
但这些设置不会生效。当我在项目子目录中打开.js或.html文件时,按Tab键会缩进2个空格。
我做错了什么?
答案 0 :(得分:5)
对于初学者,您的.dir-locals.el数据不平衡(M-x check-parens
)。
我不确定会发生什么,但如果你能让Emacs这样做,那么你应该M-x report-emacs-bug
。我假设它来自手动编辑。
我不确定多个 js-mode
项是否有效。也许那很好,但看起来很不寻常。 (可能Emacs对不平衡的parens感到困惑。)
此处重新编写您的文件以使用更常见(或至少记录在案)的点对符号:
((nil . ((tab-width . 4)
(js-indent-level . 4)))
(js-mode . ((tab-width . 4)
(js-indent-level . 4)))
(html-mode . ((tab-width . 4))))
请注意(对于此特定数据)您不需要js-mode
和html-mode
条目,因为它们会复制nil
模式条目的默认值。
编辑:在实验中,add-dir-local-variable
似乎在文件处于有效状态时表现正常。
它更喜欢在可能的地方创建更紧凑的列表符号 - 这很好;它们是等同的 - 但了解格式差异很有用
见 C-h i g (elisp) Dotted Pair Notation
RET