【问题标题】:Emacs, how to get directory of current buffer?Emacs,如何获取当前缓冲区的目录?
【发布时间】:2015-01-28 15:35:49
【问题描述】:

在 emacs 中有一个缓冲区文件名,它给出了文件的完整路径。但是有没有办法只获取当前缓冲区中加载的文件的目录?

【问题讨论】:

  • default-directory 变量?

标签: emacs elisp


【解决方案1】:

有时,当前缓冲区的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

【讨论】:

  • 是的,abo-abo 的回答解决了 title 中的问题,但如果您专门处理 buffer-file-name,我建议您使用 Sandy 的回答(尽管它改变的可能性很小)。
  • buffer-file-name 是一个函数,所以应该是(file-name-directory (buffer-file-name))
  • 实际上,根据docsbuffer-file-name既是一个函数又是一个缓冲区局部变量,所以(file-name-directory buffer-file-name)(file-name-directory (buffer-file-name))都应该可以工作。
  • 啊,我的错。 :)
  • buffer-file-name 可以是nil,例如在*scratch* 缓冲区上。
【解决方案2】:

您可以使用default-directory 变量。

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

注意expand-file-name会默认使用default-directory,所以有时候 你甚至不需要提及它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    相关资源
    最近更新 更多