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

时间:2009-12-01 05:59:14

标签: emacs

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

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

(setq c-basic-offset 4)

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

非常感谢。


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

2 个答案:

答案 0 :(得分:9)

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

((c-mode . ((c-basic-offset . 4))))

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

这利用了Per-Directory Local Variables。从链接中的文档:

  

.dir-locals.el文件应该   持有一个特别建造的清单。   此列表映射Emacs模式名称   (符号)到alists;每个人   指定要使用的变量的值   当相应的模式打开时。   特殊模式名称“nil”表示   它的列表适用于任何模式。   您可以使用而不是模式名称   指定一个名称为a的字符串   项目的子目录   目录;然后相应的   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"))))))

答案 1 :(得分:2)

另一种方法是在我的.emacs中使用样式选择器alist:http://github.com/stsquad/my-emacs-stuff/blob/master/my-c-mode.el#L103

您也可以在源代码中使用缓冲区局部变量来设置这些内容,但这通常取决于您在源代码中对它们感到高兴的项目。