12

我当前使用 emacs 的模式导致我打开了几个 shell 模式缓冲区,每个缓冲区都运行一个 ssh 会话。不过,我遇到了一个问题——当我尝试在远程会话中使用制表符完成文件名和其他内容时,shell 会尝试使用本地机器上可用的完成,而不是远程机器上可用的完成。

例如,如果文件~/foobar存在于本地机器上并且~/frob存在于远程机器上,则键入~/f并按 Tab 会导致~/foobar无法正确完成。如果我在 emacs 之外使用 ssh 并尝试同样的事情,我会得到正确的完成~/frob

如何获得 tab-completion 以完成它在正常 ssh 会话中的方式?

稍后注意:M-x cd RET /ssh:host.example.com:/path/to/me似乎也推动它能够优雅地处理选项卡完成。

4

2 回答 2

11

不要运行 Mx shell 并在远程计算机上运行 ssh,而是访问远程计算机上的一个目录(使用 Tramp),然后在该 Dired 缓冲区中运行 Mx shell。

于 2011-02-01T03:08:31.053 回答
11

当 ssh-ing 到其他机器时,Emacs 无法跟踪当前目录(默认目录)。

您可以 在当前的 shell 缓冲区中手动将default-directory设置为像/ssh:YOURHOST:/home/dir"这样的流浪文件名。

我主要通过 tramp-bookmarks/shell 在远程机器上启动 shell 会话。Tramp 自动设置默认目录。但是远程文件的目录跟踪存在一个错误,该错误已在主干(未发布)中修复。

http://comments.gmane.org/gmane.emacs.bugs/39082

于 2011-01-13T19:10:29.543 回答