由于某些复杂的原因,我想在C模式下打开某个目录中的文件(可以有任何名称,没有扩展名),我不想为Emacs修改它们(文件局部变量已经输出)。然而,我正在努力与Emacs合作。我试着将它放入我的dir-locals.el:
((nil . ((major-mode . c-mode))))
虽然当我从该目录打开文件时major-mode
变量确实被覆盖到c-mode
,但缓冲区上没有启用C模式。发生了什么,我该如何申请?
或者,我可以只为此目录添加auto-mode-alist
,但我不知道如何通过目录本地人这样做。
另外,是否有一些简单的方法可以导致dir-locals.el执行代码?我知道它不安全,但它甚至可能是配置中的代码 - 只有当处理dir-locals中的变量(打开文件)时才调用它。
感谢您的帮助。
答案 0 :(得分:12)
除了eval
之外,还有另一个名为mode
的特殊变量可以帮助您。它与文件局部变量使用的变量相同。你也可以写:
((nil . ((mode . c))))
答案 1 :(得分:8)
在.dir-locals.el
中,您只能将变量设置为某个值。您的代码所做的是将major-mode
变量设置为c-mode
值。但是,这不是模式激活的方式。要激活它,您需要调用函数c-mode
。您可以在.dir-locals.el
中设置一个特殊变量来运行函数:eval
。
因此,以下代码有效:
((nil . ((eval . (c-mode)))))
答案 2 :(得分:2)
我无法回答你的第一个问题(事实上,我希望自己能够听到答案),但auto-mode-alist
你可以拥有
(setq auto-mode-alist (cons '("<your dir path here>\." . c-mode) auto-mode-alist))`
这应该会给你想要的结果