我认为您的问题的第一部分可以解决dirtrack-mode。首先,设置外壳程序提示符以包括当前的工作目录。接下来,设置dirtrack-list一个正则表达式,告诉dirtrack-mode它如何提取它。示例:我PS1在Bash中设置为:
export PS1="[\h:\w] $ "
在Emacs中,我设置dirtrack-list并打开dirtrack-mode:
(set-variable 'dirtrack-list '("^.*[^ ]+:\\(.*\\)]" 1 nil))
(dirtrack-mode 1)
(摘自这篇很棒的博客文章。)
之后,我可以随意更改目录,并且可以随时更改default-directory。如果在外壳程序中以相同的方式将提示符设置为SSH,则通过SSH连接到远程计算机(在cd /etc/apache2远程计算机上,将其更改default-directory为),这也可以使用/etc/apache2。但是请注意,这是本地的 -对于远程计算机,default-directory仍将/etc/apache2在本地计算机上设置为。
如果我理解您问题的第二部分,则希望default-directory将其设置为像remote-machine:/etc/apache2SSH到另一台计算机时一样。使用 ssh-el时,您可以运行ssh-directory-tracking-mode以使其工作。例如,如果我运行M-x ssh,cd到 /etc/apache2,然后运行C-x C-f,则看到的提示是:
Find Files or Url: /scp:aardvark@remote-machine:/etc/apache2
您可以手动运行“ Mx ssh-directory-tracking-mode”,但将其设置为ssh-mode的钩子更为方便:
(setq ssh-mode-hook 'ssh-directory-tracking-mode)
更多信息:
dirtrack-mode吗?它有一个挂钩,可以做您想要的。