用emacs和ssh打开远程文件的最好方法是什么?

我用ssh user@192.168.1.5连接到远程机器。 当我需要在远程机器上打开文件时,例如,

emacs /usr/share/nginx/html/index.html

并打开shell中的index.html文件。 我注意到,一些emacs命令工作,但其他人不工作。 例如, Cw不工作; M-<不起作用。 我该如何解决这个问题,以及使用emacs和ssh的最佳方式是什么?

我发现这个问题,但这让我更加困惑。

我通常更喜欢从本地Emacs实例打开远程文件。

本地计算机上运行Emacs时,通过ssh打开远程文件与打开其他文件除了略有不同的语法之外并没有什么不同。

对于ssh,你可以inputCx Cf 现在,在minubuffer中你需要input/ssh:user@host:/path/to/file (请注意,一旦你开始inputpath,制表符的完成将会起作用。 在这里看到完整的文档 。

在你的例子中,这将是:

 Cx Cf /ssh:user@192.168.1.5:/usr/share/nginx/html/index.html 

现在你可以通过ssh在Emacs中编辑远程文件,同时使用本地configuration和任何已安装的软件包等。

只需要添加上面的答案,就可以为经常使用的机器编写快捷方式:

 (defun connect-remote () (interactive) (dired "/user@192.168.1.5:/")) 

这将在远程机器上打开一个直接的缓冲区。 你可以像在本地一样导航这个缓冲区。

如果你为远程机器设置了ssh密钥,你甚至不需要input密码。

如果你有一堆远程机器,你可以给每个函数一些可识别的名字,例如connect-kitkatconnect-kitkat和使用smex包来完成。

并且在@ abo-abo的post中添加关于“捷径”的内容 –

使用Emacs书签。 只需在访问远程文件或目录时正常创build书签。 然后,只需使用Cx rb跳转到一个远程书签,其名称由您提供(完成)。

如果您使用书签+,则远程书签在*Bookmark List*特别突出显示,因此您可以更轻松地识别它们。 必须由susudoroot )访问的远程书签以不同的方式突出显示。

如果你使用Dired +,那么你也可以通过在Dired中访问它们包含的远程目录,标记它们,然后点击Cx b来快速地为多个远程文件或目录添加书签。 无需提供书签名称; 他们以文件命名。 即使您从不使用这些书签来浏览远程文件,也可以使用书签+ 标签来组织这些文件,从而对这些文件的子集进行操作。

如果您使用冰柱,那么无论何时使用命令跳转到书签,您都可以在完成期间将完成的候选人缩小到远离CM-@候选人。

一个简单的答案,重点放在远程机器上:

如果我打算在远程机器上完成所有的emacs工作,我可以使用

 ssh -X username@hostname 

然后在远程会话中运行emacs,在我的本地机器上显示。 这是一个古老的问题,但我想把这个完整性。 当然,有一些xhost / Xconfiguration的问题,但在许多networking,这将工作马上!

原始海报表示有兴趣以root用户的身份打开远程文件。 这可以用命令完成:

Cx Cf /ssh:you@remotehost|sudo:remotehost:/path/to/file RET

更多的文档可以在这里find: https : //www.emacswiki.org/emacs/TrampMode#toc14

emacs的SSH模式就是你要找的。

一旦你build立起来,你就可以运行

 Mx ssh RET hostname RET 

然后它会提示你input密码两次(一次是命令行,一次是加载文件)。

大多数情况下,你可以像对待任何其他shell(非交互式和一些小的差异,但就是这样)来对待它。

它会跟踪你所在的目录,所以当你想从目录中打开一个文件时,它会自动从正确的目录开始,你只需要input文件名即可。

Emacs Wiki也有更多的信息。