在emacs中设置每个项目的缩进变量

时间:2015-01-01 14:01:33

标签: emacs indentation locals

我的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个空格。

我做错了什么?

1 个答案:

答案 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-modehtml-mode条目,因为它们会复制nil模式条目的默认值。

编辑:在实验中,add-dir-local-variable似乎在文件处于有效状态时表现正常。

它更喜欢在可能的地方创建更紧凑的列表符号 - 这很好;它们是等同的 - 但了解格式差异很有用 见 C-h i g (elisp) Dotted Pair Notation RET