Emacs,如何获取当前缓冲区的目录?

39

在emacs中,有一个buffer-file-name函数可以获取文件的完整路径。但是有没有一种方法只获取当前缓冲区所加载文件的目录呢?


5
default-directory 变量是什么? - abo-abo
2个回答

52

有时当前缓冲区的 default-directory 可能会被设置为与缓冲区当前正在访问的文件的当前目录不同的其他位置,此时上述解决方案将无法提供询问者所寻找的结果。

在这种情况下,您可以使用 file-name-directory 方法,如下所示:(file-name-directory buffer-file-name)

这里是文档链接:

http://www.gnu.org/software/emacs/manual/html_node/elisp/File-Name-Components.html


1
是的,abo-abo的回答解决了标题中的问题,但如果您特别处理buffer-file-name,我会推荐Sandy的回答(尽管它有所不同的机会)。 - phils
2
buffer-file-name是一个函数,因此应该写成(file-name-directory (buffer-file-name)) - GManNickG
5
根据文档显示,“buffer-file-name”既是函数也是缓冲区本地变量,因此(file-name-directory buffer-file-name)(file-name-directory (buffer-file-name))两者都可以使用。 - Sandy
啊,我的错误。 :) - GManNickG
我现在很好奇是否有任何理由更喜欢其中的一个... - Sandy
1
buffer-file-name 可以是 nil,例如在 *scratch* 缓冲区中。 - Andre Holzner

31

您可以使用default-directory变量。

文档: 当前缓冲区的默认目录名称,应以斜杠结尾。 要交互式更改默认目录,请使用命令“cd”。

请注意,默认情况下,expand-file-name将使用default-directory,因此有时您甚至不需要提及它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接