在Emacs shell-mode SSH会话中的Tab自动补全

13

我目前使用emacs的模式导致我打开了多个shell-mode缓冲区,每个缓冲区都运行一个ssh会话。 但我遇到了一个问题-当我尝试在远程会话中通过tab键来自动补全文件名和其他内容时,shell会尝试使用本地机器上可用的自动补全而不是远程机器上的。

例如,如果本地机器上存在文件~/foobar,而远程机器上存在文件~/frob,那么输入~/f并按tab键将得到~/foobar而不是正确的自动补全结果。但如果我在emacs之外使用ssh并尝试相同的操作,则会得到正确的~/frob自动补全结果。

我该如何使tab键自动补全像正常的ssh会话一样工作?

后续说明:M-x cd RET /ssh:host.example.com:/path/to/me似乎也可以让它能够优雅地处理tab自动补全。


可能是 Emacs 远程 shell 的重复问题。 - Gordon Gustafson
2个回答

13

不必在本地运行M-x shell,再通过ssh连接远程计算机,在使用Tramp访问远程计算机上的目录后,在该Dired缓冲区中运行M-x shell。


下次遇到这种情况,我一定会尝试这样做。 - Brighid McDonnell

11

当通过ssh连接到其他机器时,Emacs无法跟踪当前目录(default-directory)。

你可以手动将 default-directory 设置为tramp文件名,如在当前shell-buffer中设置/ssh:YOURHOST:/home/dir"

我通常通过tramp-bookmarks/shell在远程计算机上启动shell会话。Tramp会自动设置 default-directory 。但是,在远程文件的目录跟踪方面存在一个错误,该错误已在trunk(未发布版本)中得到修复。

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


谢谢Jürgen!顺便说一下,你可以使用这个elisp回溯那个目录跟踪错误修复:(add-hook 'comint-mode-hook (lambda () (set (make-local-variable 'comint-file-name-prefix) (or (file-remote-p default-directory) "")))) - ryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接