我目前使用的emacs模式导致我打开了几个shell模式缓冲区,每个缓冲区运行一个ssh会话。我遇到了这个问题 - 当我尝试在远程会话中选项卡完成文件名和其他内容时,shell会尝试使用本地计算机上的完成而不是远程计算机上的完成。
例如,如果本地计算机上存在~/foobar
文件且远程计算机上存在~/frob
,则键入~/f
并按Tab键会导致~/foobar
而不是正确完成。如果我在emacs之外使用ssh并尝试相同的操作,我会正确完成~/frob
。
如何完成标签完成以完成正常ssh会话中的方式?
后来注意: M-x cd RET /ssh:host.example.com:/path/to/me 似乎也很容易让它能够优雅地处理制表符完成。
答案 0 :(得分:11)
当ssh到其他计算机时,Emacs无法跟踪当前目录(default-directory)。
您可以手动将 default-directory 设置为当前shell缓冲区中的 / ssh:YOURHOST:/ home / dir“等tramp文件名。
我主要通过tramp-bookmarks / shell在远程计算机上启动shell会话。 Tramp会自动设置 default-directory 。 但是远程文件上的目录跟踪存在一个错误,该错误在trunk(未发布)中得到修复。
答案 1 :(得分:10)
不要运行M-x shell并将ssh运行到远程计算机,而是访问远程计算机上的目录(使用Tramp),然后在该Dired缓冲区中运行M-x shell。