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


79

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

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

然后index.html在外壳中打开文件。我注意到某些emacs命令有效,但其他命令无效。例如,C-w它不起作用;M-<不起作用。我该如何解决这个问题?使用emacs和ssh的最佳方法是什么?

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


1
有效的命令有哪些示例?(有时远程计算机上存在不同的键绑定-在远程计算机上检查您的.emacs文件-有时整个键的工作方式有所不同-例如,默认情况下,GNU屏幕在进入emacs之前先吸收了Ctrl-A部分)。
kbshimmyo 2013年

1
C空间,CF,Cg工作
Zeynel 2013年

我现在无法在远程计算机上找到.emacs文件,但我知道我没有在另一台计算机上进行任何新的键绑定
Zeynel 2013年

是的,我不确定是什么导致这组键绑定不起作用。emacs是否在远程服务器上以与本地打开文件相同的方式打开文件(所有命令均在其中运行)?也许可以提供一个线索- M-x describe-mode
kbshimmyo

您还在本地计算机上运行emacs吗?您是否有任何理由要使用远程emacs与使用本地emacs?
卡尔·格罗纳

Answers:


155

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

本地计算机上运行Emacs时,通过ssh打开远程文件与打开任何其他文件没有太大区别,除了语法略有不同

对于ssh,您可以输入C-x C-f。现在,在您要键入的minubuffer中/ssh:user@host:/path/to/file(请注意,一旦您开始输入路径,制表符补全就可以使用。还要注意前导/字符)。在这里查看完整的文档

在您的示例中,将是:

C-x C-f /ssh:user@192.168.1.5:/usr/share/nginx/html/index.html

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


22
OP可能很想知道此功能被称为:tramp这是您将要使用的最有用的功能之一。它甚至可以远程编译!
pmr 2013年

这很好用,所有命令似乎都起作用,但是我看到它不允许我进行编辑,index.html因为它说缓冲区是只读的。但是,如果在远程计算机上打开,我可以编辑相同的文件。顺便说一句,当我用C-x C-f /ssh:user@host filename它打开文件时,要求我输入密码。
Zeynel 2013年

我尝试了Documents目录中的另一个文件,可以毫无问题地编辑该文件。
Zeynel 2013年

您知道如何指定端口吗?
菲利普·柯比布里德

4
@PhilipKirkbride完整记录的语法是/method:user@host#port:filename
Carl

27

仅添加到上面的答案,您可以为经常使用的计算机编写快捷方式:

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

这将dired在远程计算机上打开一个缓冲区。您可以像本地缓冲区一样浏览此缓冲区。

如果您已为远程计算机设置了ssh密钥,则甚至不必输入密码。

如果您有一堆远程计算机,则可以为每个函数指定一些可识别的名称,例如connect-cupcakeconnect-kitkat并使用smexpackage来完成。


这很棒。我会试试看。您是否也对以上评论中提出的问题有答案:/usr/share/nginx/html/index.html如果在远程计算机中打开该文件,则可以编辑该文件;但是当我用ssh打开它时,它index.html是只读的。为什么是这样?
Zeynel 2013年

我猜您没有与root用户建立联系,通常只有root用户可以写信给/usr/share/
abo-abo

但是我如何以root用户身份连接?我尝试了一些类似的方法,C-x C-f /sudo ssh:user@host filename但是那没有用。
Zeynel 2013年

1
这是我前一段时间未能解决的问题。我可以使用流浪汉连接到远程,或以sudo的身份连接到本地,但不能同时使用两者。一种解决方法是使自己成为具有的/usr/share/nginx/html/文件夹的所有者chown
abo-abo

我打开文件/etc/nginx/sites-available/example.com.conf并对其进行编辑,然后保存并关闭。现在我再次打开它,这次我不能编辑它了吗?我认为它必须做一些权限。您能帮我理解为什么会这样吗?
Zeynel 2013年

18

并添加到@ abo-abo的有关“快捷方式”的帖子中-

使用Emacs书签。 当您访问远程文件或目录时,通常只需创建书签即可。然后,使用C-x r b跳转到您提供的名称(带有完整名称)的远程书签。

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

如果您使用Dired +,则还可以通过访问Dired中包含的远程目录,将它们标记并单击来快速标记多个远程文件或目录C-x b。无需提供书签名称;它们以文件命名。即使您从未使用这些书签导航到远程文件,也可以将它们与Bookmark + 标记一起使用来组织文件,从而对它们的子集进行操作。

如果使用“冰柱”,则每当使用命令跳转到书签时,都可以通过C-M-@在完成过程中命中来将完成情况候选者范围缩小到远程候选者。



3

一个针对远程计算机的简单答案:

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

ssh -X username@hostname

然后在远程会话中运行emacs,并重新显示在我的本地计算机上。这是一个古老的问题,但我想将其完整。当然存在一些xhost / X config问题,但是在许多网络中,它可以立即起作用!


2

您正在寻找emacs的SSH模式

设置好之后,您就可以运行

M-x ssh RET hostname RET

然后,它两次提示您输入密码(一次输入命令行,一次输入文件)。

在大多数情况下,您可以将其像其他任何外壳一样对待(非交互式和一些细微的差别,仅此而已)。

它会跟踪您所在的目录,因此,当您要从目录中打开文件时,它会自动从正确的目录开始,而您只需要输入文件名即可。

Emacs Wiki也有更多信息。

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.