自定义Emacs时,我应该如何考虑elisp函数cd
和cd-absolute
以及elisp变量default-directory
?我的经验使我相信cd-absolute
会更改emacs进程本身的目录(跨缓冲区的全局设置,其中default-directory
未在本地设置),而cd
和default-directory
则位于缓冲区本地。但是,内置的帮助不足以使我理解,并且我看到的行为使我怀疑cd-absolute
覆盖了我要访问的缓冲区中的default-directory
。
结束编辑
如果我在这里没有得到任何答复,我将不得不在help-gnu-emacs列表上进行我自己的研究,并且,作为最后的选择,我将不得不阅读源代码。
我认为您误解了default-directory
的工作方式。在default-directory
中设置.emacs
对大多数缓冲区无效。正在访问文件的缓冲区的本地值default-directory
将自动设置为存储访问文件的目录。这将覆盖先前设置的default-directory
的所有值。
如果通过cd
(或cd-absolute
)更改缓冲区的当前目录,则只会为该缓冲区设置default-directory
。如果您随后打开一个新文件,则新缓冲区的default-directory
将设置为新文件的目录。
如果您打开一个不访问文件的新缓冲区,那么此新缓冲区的default-directory
值将与前一个缓冲区的值相同。这是cd
的结果将应用于除调用其以外的缓冲区的唯一情况。
cd-absolute
不可用于交互使用。据我所知,它是一个便利函数,其与cd
的区别仅在于路径被视为absolute而不是relative路径。
鉴于所有这些,您想做什么?
如果要在Emacs启动后进入某个目录,请在init文件的末尾写类似如下的内容:
(dired "~/PATH/TO/DIRECTORY")