SSH 上的 Emacs eshell 不遵守关键命令或 elisp

Bra*_*ght 5 ssh emacs

当通过 SSH 连接到远程服务器时,Eshell 表现不佳,例如:

M-x eshell
ssh server
<tab> *inserts literal tab instead of trying to complete*
Run Code Online (Sandbox Code Playgroud)

击中<tab>,例如,插入一个文本标签。有没有办法find-file blah通过 SSH完成选项卡完成、lisp 交互(如)等?我读过的所有文档都说 Eshell 是“TRAMP-aware”的,我认为这意味着它可以处理这个问题。

我只是错误地假设它可以通过 SSH 工作,还是有什么问题?

这是 Emacs 24.0.94 预测试。

cro*_*ing 8

SSH 实际上是使用TRAMP-mode集成到 Eshell 中,因此您无需使用cd特殊路径名运行“ssh”命令:

~ $ cd /ssh:user@host.com:~
/ssh:user@host.com:/home/user $ 
Run Code Online (Sandbox Code Playgroud)

然后你应该在远程服务器上对命令和文件名进行制表符补全。选项卡完成可能会滞后,但这取决于它必须远程查找和通过网络传输的替代方案的数量。

如果您的肌肉记忆出卖了您并且您继续输入“ssh”,您可能需要在 eshell 中定义一个别名(这将自动保存到~/.emacs.d/eshell/alias

$ alias ssh 'cd /ssh:$1:~'
Run Code Online (Sandbox Code Playgroud)

另外值得注意的是,当 Eshell 位于远程服务器上并且您点击C-x C-f它时,它将完成远程服务器上的文件名。它们将自动加载到本地缓冲区并通过 SCP 写回。你也可以在没有 Eshell 的情况下做到这一点,这是tramp-mode 的一个特性。