选项卡完成在Emacs shell模式SSH会话中

时间:2011-01-13 17:41:51

标签: linux bash emacs ssh tab-completion

我目前使用的emacs模式导致我打开了几个shell模式缓冲区,每个缓冲区运行一个ssh会话。我遇到了这个问题 - 当我尝试在远程会话中选项卡完成文件名和其他内容时,shell会尝试使用本地计算机上的完成而不是远程计算机上的完成。

例如,如果本地计算机上存在~/foobar文件且远程计算机上存在~/frob,则键入~/f并按Tab键会导致~/foobar而不是正确完成。如果我在emacs之外使用ssh并尝试相同的操作,我会正确完成~/frob

如何完成标签完成以完成正常ssh会话中的方式?

后来注意: M-x cd RET /ssh:host.example.com:/path/to/me 似乎也很容易让它能够优雅地处理制表符完成。

2 个答案:

答案 0 :(得分:11)

当ssh到其他计算机时,Emacs无法跟踪当前目录(default-directory)。

您可以手动将 default-directory 设置为当前shell缓冲区中的 / ssh:YOURHOST:/ home / dir“等tramp文件名。

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

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

答案 1 :(得分:10)

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