emacs目录变量,不包括特定的subdir

时间:2017-08-16 06:31:33

标签: emacs directory project indentation subdirectory

我有一个项目A需要2个空格缩进,但它在另一个项目中嵌入了一个使用4个空格的子文件夹。

我在A / .dir-locals.el中有以下内容:

{{1}}

...它很适用于目录A中的所有c文件。

问题:我可以在同一个dir-locals.el文件中排除子文件夹B受2个空格缩进的影响吗?

我可能会因为B的设置创建一个A / B / .dir-locals.el,但由于它现在是A的例外,我宁愿将设置保存在A / .dir- locals.el

2 个答案:

答案 0 :(得分:1)

您无法在.dir-locals个文件中指定路径。

我认为.editorconfig无论如何都是更好的解决方案。因为它允许您与其他编辑的用户共享编码样式。 Emacs有一个很好的package来应用.editorconfig文件的设置。

将其放在A目录中:

# top-most EditorConfig file

root = true
# only match files in root folder
[/*.c]
indent_style = space
indent_size = 2

答案 1 :(得分:1)

从手册中引用:

   Here’s an example of a ‘.dir-locals.el’ file:

     ((nil . ((indent-tabs-mode . t)
              (fill-column . 80)))
      (c-mode . ((c-file-style . "BSD")
                 (subdirs . nil)))
      ("src/imported"
       . ((nil . ((change-log-default-name
                   . "ChangeLog.local"))))))

This sets ‘indent-tabs-mode’ and ‘fill-column’ for any file in the
directory tree, and the indentation style for any C source file.  The
special ‘subdirs’ element is not a variable, but a special keyword which
indicates that the C mode settings are only to be applied in the current
directory, not in any subdirectories.  Finally, it specifies a different
‘ChangeLog’ file name for any file in the ‘src/imported’ subdirectory.

- C-h i g (emacs)Directory Variables RET

所以在你的情况下,你可能正在寻找类似的东西:

((c-mode . ((indent-tabs-mode . nil)
            (c-basic-offset . 2)))
 ("B" . ((c-mode . ((c-basic-offset . 4))))))