【发布时间】:2015-01-28 15:35:49
【问题描述】:
在 emacs 中有一个缓冲区文件名,它给出了文件的完整路径。但是有没有办法只获取当前缓冲区中加载的文件的目录?
【问题讨论】:
-
default-directory变量?
在 emacs 中有一个缓冲区文件名,它给出了文件的完整路径。但是有没有办法只获取当前缓冲区中加载的文件的目录?
【问题讨论】:
default-directory 变量?
有时,当前缓冲区的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
【讨论】:
buffer-file-name,我建议您使用 Sandy 的回答(尽管它改变的可能性很小)。
buffer-file-name 是一个函数,所以应该是(file-name-directory (buffer-file-name))。
buffer-file-name既是一个函数又是一个缓冲区局部变量,所以(file-name-directory buffer-file-name)和(file-name-directory (buffer-file-name))都应该可以工作。
buffer-file-name 可以是nil,例如在*scratch* 缓冲区上。
您可以使用default-directory 变量。
文档: 当前缓冲区的默认目录名称。应该以斜线结尾。 要以交互方式更改默认目录,请使用命令 `cd'。
注意expand-file-name会默认使用default-directory,所以有时候
你甚至不需要提及它。
【讨论】: