SSH上的Emacs eshell不遵循键盘命令或elisp


4

当通过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预测试上。


如果这样做有帮助ssh -t -t server吗?double -t选项强制ssh分配伪终端,即使它不在tty上运行也是如此。
弗兰

Answers:


7

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

~ $ cd /ssh:user@host.com:~
/ssh:user@host.com:/home/user $ 

然后,您应该在远程服务器上使用Tab键完成命令和文件名的补全。制表符补全可能会比较滞后,但这取决于它必须进行远程查找并通过网络进行传输的替代方案。

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

$ alias ssh 'cd /ssh:$1:~'

还要注意的是,当Eshell在远程服务器上并单击时C-x C-f,它将在远程服务器上完成文件名。它们将被自动加载到本地缓冲区中并通过SCP写回。您也可以在没有Eshell的情况下做到这一点,这是流浪汉模式的功能。


如您所描述的那样,该方法有效,但是如果cd /ssh:user@host.com:~随后执行此操作,则cd /最终返回到本地根目录,大概是因为我使用的是eshell cd。但是,*cd给出错误cd: external command not found。您是否知道获取选项卡补全和正确命令行为的方法,还是eshell为此使用了错误的工具?
Gordon Gustafson 2014年

这解决了我的问题:C-x C-f user@host.com:~M-x shell。它不是eshell,但确实可以正确地cd完成制表符。
Gordon Gustafson,2014年

如何与此cd /ssh:..命令一起提供私钥?
mythicalcoder
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.