当通过 SSH 连接到远程服务器时,Eshell 表现不佳,例如:
M-x eshell
ssh server
<tab> *inserts literal tab instead of trying to complete*
例如,点击<tab>
会插入一个文字制表符。有没有办法find-file blah
通过 SSH 获得制表符补全、lisp 交互(如 )等?我读过的所有文档都说 Eshell 是“TRAMP 感知”的,我猜这意味着它可以处理这个问题。
我是不是错误地假设它可以通过 SSH 工作,或者有什么问题?
这是对 Emacs 24.0.94 的预测试。
答案1
SSH 实际上集成到了 Eshell 中,使用流浪模式,因此您不需要运行“ssh”命令,而是使用cd
特殊路径名:
~ $ cd /ssh:[email protected]:~
/ssh:[email protected]:/home/user $
然后,您应该可以在远程服务器上使用 Tab 补全命令和文件名。不过,Tab 补全可能会比较滞后,具体取决于需要远程查找并通过网络传输多少个备选方案。
如果你的肌肉记忆背叛了你,你一直输入“ssh”,你可能需要定义一个 eshell 别名(这将自动保存到~/.emacs.d/eshell/alias
)
$ alias ssh 'cd /ssh:$1:~'
还要注意的是,当 Eshell 在远程服务器上并且您点击C-x C-f
它时,它将完成远程服务器上的文件名。它们将自动加载到本地缓冲区并通过 SCP 写回。您也可以在没有 Eshell 的情况下执行此操作,这是 tramp-mode 的一个功能。