2011-01-13 55 views
10

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

例如,如果该文件存在~/foobar在本地机器上,并且存在~/frob在远程机器上,在~/f打字,在~/foobar按压代替正确完成的标签的结果。如果我在emacs之外使用ssh并尝试相同的操作,那么我会正确完成~/frob

如何获得tab-completion来完成正常ssh会话中的操作?

后记:M-x cd RET /ssh:host.example.com:/path/to/me似乎也能够使它能够优雅地处理制表符完成。

+0

可能重复的[Emacs远程shell](http://stackoverflow.com/questions/1134149/emacs-remote-shell) – 2014-05-27 21:39:06

回答

10

当ssh到其他机器时,emacs无法跟踪当前目录(default-direcotry)。

您可以设置默认目录一个流浪汉文件名状/SSH:YOURHOST:在当前的shell缓冲手动/家居/目录”

我开始一个壳会议远程MACHING主要通过流浪汉书签/壳。流浪汉集的默认目录自动。 但在direcotry一个bug远程文件跟踪,其固定在躯干(未发行)。

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

+0

这几乎正是我需要的答案,谢谢。 – 2011-01-13 20:37:23

+0

谢谢jürgen!顺便说一句,你可以backport该目录跟踪错误修复这个ELISP: (加钩'COMINT模式钩 (lambda()(设置(使本地变量'comint文件名前缀) (或(file-remote -p default-directory)“”)))) – ryan 2011-05-16 03:29:08

9

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