在Emacs Lisp中获取当前目录

在Emacs Lisp中获取当前目录,emacs,elisp,Emacs,Elisp,我正在尝试编写一个.dir-locals.el文件。我想动态查找文件所在的目录,并将其与“标记”连接起来。这是我第一次尝试: ((nil . ((tags-file-name . (concat default-directory "TAGS"))))) 这不管用。我不是Emacs Lisp专家。有什么问题吗?我不清楚您想要什么,但是(concat默认目录“标记”)看起来是正确的 如果要设置标记文件名变量,可以这样做:(setq标记文件名(concat默认目录“tags”)从技术上讲,您需要这

我正在尝试编写一个.dir-locals.el文件。我想动态查找文件所在的目录,并将其与“标记”连接起来。这是我第一次尝试:

((nil . ((tags-file-name . (concat default-directory "TAGS")))))

这不管用。我不是Emacs Lisp专家。有什么问题吗?

我不清楚您想要什么,但是
(concat默认目录“标记”)
看起来是正确的


如果要设置
标记文件名
变量,可以这样做:
(setq标记文件名(concat默认目录“tags”)

从技术上讲,您需要这样做才能让代码表单在
.dir locals.el
中进行计算:

((nil . ((eval . (setq tags-file-name (concat default-directory "TAGS"))))))
但是,我尝试了这个方法,在执行
dir locals
中的代码时,
default directory
似乎是
nil
,因此看起来不可能执行您正在尝试的操作

也就是说,
标记文件名
看起来不像是要手动设置的。相反,它是在您第一次访问标记文件时由标记代码设置的

那么,为什么不让它处于未设置状态,只使用标记函数呢<代码>标记毕竟是默认的标记文件名


<> > > >编辑< /强>:您也可以考虑使用附加的代码>项目局部变量< /代码>库,它使用类似的Projject .EL文件,但对您可以放入其中的代码更为灵活。这就是我个人如何解决您的问题。

结合Sanitync的解决方案和我在别处找到的其他片段,我得到:

((nil . ((eval . (setq tags-file-name (concat (locate-dominating-file buffer-file-name ".dir-locals.el") "TAGS"))))))
我认为它可以满足您的需要(效率有点低,因为我们必须两次查找.dir-locals.el)。

在linux中,如何:

(getenv "PWD")

这是否意味着在启动Emacs后,我必须在调用
find tag
时始终将其指向标记文件?Emacs还记得我下次启动时使用的标签文件吗?