由于一些复杂的原因,我想在C模式下打开某些目录中的文件(可以有任何名称,没有扩展名),而且我不想为Emacs (文件局部变量已经退出)修改它们。然而,我正和Emacs一起挣扎着去做。我试着把这个放到我的dir-locals.el
((nil . ((major-mode . c-mode))))虽然当我从该目录打开文件时,major-mode变量确实被重写为c-mode,但缓冲区上没有启用C模式。这是怎么回事,我该如何申请?
或者,我可以只为这个目录添加到auto-mode-alist中,但是我不知道如何通过目录局部变量来实现这一点。
另外,有什么简单的方法可以导致从dir-locals.el中执行代码吗?我知道这是不安全的,但是它甚至可能是配置中的代码--关键是只有在处理来自dir-局部变量的变量时才调用它(打开文件)。
谢谢你帮忙。
发布于 2013-08-14 14:13:58
在.dir-locals.el中,只能将变量设置为某个值。您的代码所做的是将major-mode变量设置为c-mode值。但是,这不是激活模式的方式。要激活它,需要调用函数c-mode。可以在.dir-locals.el中设置一个特殊变量来运行函数:eval。
因此,以下代码起作用:
((nil . ((eval . (c-mode)))))发布于 2013-08-14 14:17:53
除了eval之外,还有另一个名为mode的特殊变量可以帮助您。它是文件局部变量使用的相同变量。你也可以写:
((nil . ((mode . c))))发布于 2013-08-14 13:12:32
我不能回答你的第一个问题(事实上,我很想听你自己回答这个问题),但是我想知道你可以拥有的auto-mode-alist
(setq auto-mode-alist (cons '("<your dir path here>\." . c-mode) auto-mode-alist))`这会给你你想要的结果
https://stackoverflow.com/questions/18232535
复制相似问题