根据the Emacs docs,每次打开文件时,Emacs都会将default-directory
更改为包含该文件的目录。
然后,如果光标位于该缓冲区中并且您(例如)启动SLIME,则它使用default-directory
作为SLIME的当前工作目录。如果您尝试打开新文件,则会以default-directory
为起点打开文件。
我希望能够M-x cd
或以其他方式cd
访问目录,然后永远不会让我的当前工作目录更改为除该目录之外的任何内容,直到我告诉它。我希望它在所有缓冲区中都是全局的,所以无论何时我正在做涉及当前工作目录的事情,我都知道它的设置是什么,无论我的光标在哪里。有没有办法做到这一点?
答案 0 :(得分:12)
您可以尝试使用以下内容:
(add-hook 'find-file-hook
(lambda ()
(setq default-directory command-line-default-directory)))
答案 1 :(得分:4)
另一种变体是将 default-directory 绑定到目录本地变量中的必要目录,例如:在您的一个父目录中的.dir-locals.el文件中,如下所示:
((nil . ((default-directory . "~/.emacs.d/"))))
答案 2 :(得分:1)
这是迄今为止我提出的最好的,可悲的是:
(defun find-file-save-directory ()
(interactive)
(setq saved-default-directory default-directory)
(ido-find-file)
(setq default-directory saved-default-directory))
(global-set-key "\C-x\C-f" 'find-file-save-directory)
只要在default-directory
之前正确设置C-x C-f
,此功能就有效。我将接受jurta的回答,指出我有用的方向。