我正在尝试编写.dir-locals.el文件。我想动态找到该文件所在的目录,并将其与“TAGS”连接。这是我的第一次尝试:
((nil . ((tags-file-name . (concat default-directory "TAGS")))))
这不起作用。我不是Emacs Lisp专家。这有什么问题?
答案 0 :(得分:2)
结合sanityinc的解决方案和我在别处找到的其他一些片段,我得到:
((nil . ((eval . (setq tags-file-name (concat (locate-dominating-file buffer-file-name ".dir-locals.el") "TAGS"))))))
我认为它可以满足您的需求(效率稍低,因为我们必须两次查找.dir-locals.el)。
答案 1 :(得分:2)
在linux中,怎么样:
(getenv "PWD")
答案 2 :(得分:1)
从技术上讲,您需要执行以下操作才能在.dir-locals.el
内获取代码表单以进行评估:
((nil . ((eval . (setq tags-file-name (concat default-directory "TAGS"))))))
但是,我尝试了这一点,default-directory
在执行nil
中的代码时似乎是dir-locals
,所以看起来你做的不可能。
那就是说tags-file-name
看起来不像是手动设置的。相反,当您第一次访问标记文件时,它会由标记代码设置。
那么为什么不让它取消设置并只使用标签功能?毕竟,TAGS
是默认的标签文件名。
编辑:您可能还会考虑使用附加project-local-variables
库,该库使用类似的每个项目.el文件,但对于您可以放入的代码更灵活它。这就是我亲自解决你的问题的方法。
答案 3 :(得分:0)
我不清楚你想要什么,但(concat default-directory "TAGS")
看起来是正确的。
如果您想设置tags-file-name
变量,可以这样做:(setq tags-file-name (concat default-directory "TAGS"))
。