Project A: tab = 4space Project B: tab = 8space Project C; tab 不是空格
添加文件本地变量,或者文件夹本地变量(在 .dir-locals
文件内),指定变量 tab-width
的值
感觉楼主可能更需要的是 .dir-local,放在项目根目录即可
tab 的行为:indent-tabs-mode 和 tab-width, 都是 buffer-local 的; 根据项目:这个你要看具体什么项目,有什么特征什么的。至少我知道的,判断项目至少可以通过 projectile / default-directory / magit-toplevel 等等
两种方案:
-
.dir-locals.el
仅 emacs,使用简单,在项目根目录
M-x add-dir-locals
根据提示操作就行了 -
类似
ini
配置文件,几乎所有的编辑器都支持了(当然需安装扩展/插件)
已经在git project的顶层 通过 SPC f v d 添加了
((“cc-mode” (tab-width . 8) (indent-tabs-mode . t)))
但是tab-width 没有效果.
SPC h d v, 发现tab-width的值还是2, 被覆盖了.
请问如何以dir-locals为最终的设定值?
你重新打开 buffer 试试,正常情况下会问你是否应用本地变量的。
本地变量是每次打开或者 revert 的时候才会应用的。如果不想让它提示需要将它设为安全变量。
根据检查应该都没有生效.
发现项目A中的.c文件时候移动一下是2个空格
有的项目B中的.c文件时候移动一下是1个空格.
请问这个是什么情况? 以及如何让dir-locals 生效.
把你的 dir-local 文件的内容贴出来,好让大家帮你试试
((“cc-mode”
(tab-width . 8)
(indent-tabs-mode . t)))
我这边可以的
而且 tab-width 本身就是安全的,所以不会有提示。
如果直接在buffer local 下面直接set-variable 会生效 所以是不是我的dir-locals 根本就没有执行? 如何让他执行?
你关闭文件再打开呢?注意你的 dir-local 指定了只对 cc-mode 有效
重启emacs 都不行
如果major-mode 不是 cc-mode 是不会有效的,是不是这个原因?
你可以不指定mode,这样它对所有的 mode 都有效
tab-width is a variable defined in ‘C source code’.
Its value is 2
Original value was 8
默认都是2,我只有在dir-local里面设置了8 所以应该是先生效了 然后被改了.
我使用的helloword.c来试验的
看来这是一个 emacs / spacemacs 的 issue,需要用 set-default 来解决
你的两个项目都是 c 语言吗?如果是就麻烦了
应该是没有问题
我刚才也是这么试的,就只有 c 的不行, elisp 的设了就管用