通过Emacs Shell使用SSH?

42

我想知道是否有人在emacs shell中使用ssh。我可以连接到远程机器,但我无法使用“emacs filename”打开文件以在emacs中查看/编辑,因为“终端类型“dumb”不足以运行emacs”(通常情况下,通过终端连接时,emacs会在控制台中打开)。

尝试以这种方式使用emacs是个坏主意吗,还是可能需要进行一些修复?非常感谢!

6个回答

45

乍一看可能不明显,但是用Emacs Lisp实现的终端eshell可以很好地与tramp一起使用:

Welcome to the Emacs shell

~ $ uname -a
Linux local-machine 2.6.30-1-686 #1 SMP Thu Jul 30 14:45:30 UTC 2009 i686 GNU/Linux
~ $ cd /ssh:user@remote-machine:~
/ssh:user@remote-machine:/home/user $ uname -a
Linux remote-machine 2.6.18-6-686 #1 SMP Thu Aug 20 21:56:59 UTC 2009 i686 GNU/Linux
/ssh:user@remote-machine:/home/user $ 

1
哇,看起来非常棒。Emacs 有太多的 shell 选项! - hatmatrix
2
@hillu 我现在只是被困在椅子上了!刚才我使用 tramp 访问远程文件只有一个小时左右。感谢你的帖子,我启动了 eshell,直接进入了远程机器。而且你知道吗?你甚至可以像调用“cp”命令一样轻松地从一台机器复制文件到另一台机器。太棒了! - yves Baumes
2
然后我们就可以正常地查找和编辑文件了!C-x C-f 可以工作,一些像 find-file 这样的 elisp 也可以 :) http://wikemacs.org/wiki/Eshell#Built-In_Commands - Ehvince
1
@yvesBaumes和@hillu,你们用这种方法时cd命令正常吗?对我来说,如果我最初使用cd进入我的主目录,那么cd ..无法将我带到上一级目录,而cd /会将我带到本地根目录。你知道有什么技巧可以帮助避免eshell cd命令混淆吗? - Gordon Gustafson
这看起来很棒,但我得到了一个错误:“主机名不得与方法“ssh”匹配”。 - kevzettler
1
在Windows上,我使用plink而不是ssh,就像这样/ plink:user@remote-machine:/ some / pathplink是随putty一起提供的实用程序。 - rorsach

18

两个建议:

  • 通过 . ~/.bashrc 明确地引用 .bashrc 文件,或重新排列 bash 初始化文件和 ~/.profile 文件,使其在 Emacs shell 中加载;然后在 Emacs shell 中运行 ssh 就可以正常工作了。
  • 使用 Emacs 特定的 Tramp mode 来通过 ssh 访问远程文件,这对于你只需要更新/触摸/编辑远程文件非常有用,因此你不需要打开从本地 emacs 启动的 ssh 会话中的远程 emacs。

我得试试这个 Tramp 模式,听起来不错。谢谢! - hatmatrix
1
是的 - 另一个提问者比我早了一两分钟回答第一个问题,但如果您只想快速编辑一个或两个其他主机的文件,那么 tramp 就是您需要的。它会将文件简单地复制到您的计算机上,并通过 scp 发送更新版本 - 而无需您明确执行此操作。这可能比导出 X11 会话(他正确地指出另一个选项)更轻量级。此外,tramp 实际上是更老的 ange ftp 的后续版本。 - Dirk Eddelbuettel
是的,我注意到 tramp 超越了 ange ftp(根据其他线程)。而且我的 X11 连接似乎非常缓慢,所以对于我的情况来说,tramp 明显更好。谢谢。 - hatmatrix
不客气。如果你认为那是正确的答案,我想你也可以接受它作为官方答案 :-) - Dirk Eddelbuettel

17

Emacs有term-mode,它是一个完整的终端仿真器,你可以在其中运行emacs。你在终端中运行的任何东西都将在term-mode中运行。

此外,Emacs还具有tramp模式,可以通过ssh打开文件。


/scp:user@ipOrHost#port:/

它可以将文件来回传输。您可以像编辑本地文件一样编辑它们。

无需进行X11转发或其他花式操作。


谢谢 - 看起来有很多选择:shell、eshell和term...你更喜欢哪一个?我已经谷歌了一下,似乎“shell”是最广泛使用的... - hatmatrix
尽管它们的名称是shell和eshell,但它们并不是真正的shell。它们只是读写进程的工具。但是term是一个终端仿真器,就像OSX上的终端或Linux上的xterm一样。你甚至可以在其中运行ncurses程序,而这是在shell中无法做到的。如果你想在emacs中生活,那么使用term;如果你想运行快速命令并仍然使用终端(如xterm等),则使用shell。 - Hamza Yerlikaya
2
啊,是的 - 似乎有些人抱怨 term 没有像 shell 和 eshell 那样的文档,但它似乎比 shell 更好地处理我的 ssh 会话... 但是在 emacs 中使用 emacs?"emacs:终端类型eterm-color未定义。"这表明需要更改 TERM 变量,但如果我进一步阅读它,我想这可以做到?有点可怕! - hatmatrix

6

1

我一直在苦苦挣扎Xming,虽然它能用,但由于我的网络连接不是最快的,我必须等待30秒以上才能看到emacs或任何X应用程序。而且,在打开缓冲区后滚动时,有时会冻结 => 非常烦人

试试No machine(nxserver-freenx服务器/客户端)。有免费版服务器,绝对是连接到Linux框并通过X使用xterm和emacs的最佳和最快的解决方案。它立即显示并响应非常快。即使在非常慢的连接下 :-) 客户端可用于Windows、Mac OS、Linux。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接