11

由于某些复杂的原因,我想在 C 模式下打开某个目录(可以有任何名称,没有扩展名)中的文件,并且我不想为 Emacs 修改它们(文件局部变量已被淘汰)。然而,我正在努力使用 Emacs 来做到这一点。我试图把它放到我的 dir-locals.el 中:

((nil . ((major-mode . c-mode))))

虽然当我从该目录打开文件时major-mode变量确实被覆盖,c-mode但缓冲区上没有启用 C 模式。发生了什么事,我该如何应用?

或者,我可以添加到auto-mode-alist这个目录,但我不知道如何通过目录本地人来做到这一点。

另外,是否有一些简单的方法可以从 dir-locals.el 执行代码?我知道这是不安全的,但它甚至可能是配置中的代码——关键是只有在处理来自 dir-locals 的变量(打开文件)时才调用它。

感谢帮助。

4

3 回答 3

12

除了eval,还有一个特殊的变量mode可以帮助你。它与文件局部变量使用的变量相同。你也可以写:

((nil . ((mode . c))))
于 2013-08-14T14:17:53.573 回答
8

.dir-locals.el您只能将变量设置为某个值。您的代码所做的是将major-mode变量设置为该c-mode值。但是,这不是激活模式的方式。要激活它,您需要调用该函数c-mode。您可以设置一个特殊变量.dir-locals.el来运行函数:eval.

因此,以下代码有效:

((nil . ((eval . (c-mode)))))
于 2013-08-14T14:13:58.337 回答
2

我不能回答你的第一个问题(事实上,我自己也想听听这个问题的答案)但是auto-mode-alist你可以有

(setq auto-mode-alist (cons '("<your dir path here>\." . c-mode) auto-mode-alist))`

这应该给你你想要的结果

于 2013-08-14T13:12:32.253 回答