为不同的项目设置不同的c-basic-offs

Zel*_*luX 2 emacs

我通常使用4个空格来缩进C程序,但为了与某些开源项目保持一致,我有时需要更改为2-white-space缩进.

目前我的缩进样式在我的.emacs文件中分配

(setq c-basic-offset 4)
Run Code Online (Sandbox Code Playgroud)

当我想要处理那些2-white-space缩进项目时.我必须关闭我的Emacs,修改值,然后重新开始.有没有更简单的方法来做到这一点?

非常感谢.


PS.每次打开源文件时设置c-basic-offset变量都是太多工作,是否可以根据工作目录选择不同的值?

Tre*_*son 9

在要自定义命名的目录中创建一个文件.dir-locals.el,并将其编辑为包含:

((c-mode . ((c-basic-offset . 4))))
Run Code Online (Sandbox Code Playgroud)

注意:这是Emacs 23.1中的新功能.

这利用了每目录本地变量.从链接中的文档:

.dir-locals.el文件应该包含一个特殊构造的列表.此列表将Emacs模式名称(符号)映射到alists; 每个alist指定在打开相应模式时要使用的变量的值.特殊模式名称"nil"表示其alist适用于任何模式.您可以指定一个字符串,而不是模式名称,该字符串是项目目录的子目录的名称; 然后相应的alist应用于该子目录中的所有文件.

这是一个.dir-locals.el文件的例子 :

 ((nil . ((indent-tabs-mode . t)
          (tab-width . 4)
          (fill-column . 80)))
  (c-mode . ((c-file-style . "BSD")))
  (java-mode . ((c-file-style . "BSD")))
  ("src/imported"
   . ((nil . ((change-log-default-name . "ChangeLog.local"))))))
Run Code Online (Sandbox Code Playgroud)