我使用连接到远程计算机ssh user@192.168.1.5
。当我需要在远程计算机中打开文件时,例如,
emacs /usr/share/nginx/html/index.html
然后index.html
在外壳中打开文件。我注意到某些emacs命令有效,但其他命令无效。例如,C-w
它不起作用;M-<
不起作用。我该如何解决这个问题?使用emacs和ssh的最佳方法是什么?
我发现了这个问题,但让我更加困惑。
我使用连接到远程计算机ssh user@192.168.1.5
。当我需要在远程计算机中打开文件时,例如,
emacs /usr/share/nginx/html/index.html
然后index.html
在外壳中打开文件。我注意到某些emacs命令有效,但其他命令无效。例如,C-w
它不起作用;M-<
不起作用。我该如何解决这个问题?使用emacs和ssh的最佳方法是什么?
我发现了这个问题,但让我更加困惑。
Answers:
我通常更喜欢从本地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编辑远程文件。
tramp
这是您将要使用的最有用的功能之一。它甚至可以远程编译!
index.html
因为它说缓冲区是只读的。但是,如果在远程计算机上打开,我可以编辑相同的文件。顺便说一句,当我用C-x C-f /ssh:user@host filename
它打开文件时,要求我输入密码。
/method:user@host#port:filename
仅添加到上面的答案,您可以为经常使用的计算机编写快捷方式:
(defun connect-remote ()
(interactive)
(dired "/user@192.168.1.5:/"))
这将dired
在远程计算机上打开一个缓冲区。您可以像本地缓冲区一样浏览此缓冲区。
如果您已为远程计算机设置了ssh密钥,则甚至不必输入密码。
如果您有一堆远程计算机,则可以为每个函数指定一些可识别的名称,例如connect-cupcake
,connect-kitkat
并使用smex
package来完成。
/usr/share/nginx/html/index.html
如果在远程计算机中打开该文件,则可以编辑该文件;但是当我用ssh打开它时,它index.html
是只读的。为什么是这样?
/usr/share/
。
C-x C-f /sudo ssh:user@host filename
但是那没有用。
/usr/share/nginx/html/
文件夹的所有者chown
。
/etc/nginx/sites-available/example.com.conf
并对其进行编辑,然后保存并关闭。现在我再次打开它,这次我不能编辑它了吗?我认为它必须做一些权限。您能帮我理解为什么会这样吗?
并添加到@ abo-abo的有关“快捷方式”的帖子中-
使用Emacs书签。 当您访问远程文件或目录时,通常只需创建书签即可。然后,使用C-x r b
跳转到您提供的名称(带有完整名称)的远程书签。
如果您使用Bookmark +,则远程书签会在中特别突出显示*Bookmark List*
,因此您可以更轻松地识别它们。并且必须由su
或sudo
(root
)访问的远程书签以不同的方式突出显示。
如果您使用Dired +,则还可以通过访问Dired中包含的远程目录,将它们标记并单击来快速标记多个远程文件或目录C-x b
。无需提供书签名称;它们以文件命名。即使您从未使用这些书签导航到远程文件,也可以将它们与Bookmark + 标记一起使用来组织文件,从而对它们的子集进行操作。
如果使用“冰柱”,则每当使用命令跳转到书签时,都可以通过C-M-@
在完成过程中命中来将完成情况候选者范围缩小到远程候选者。
原始发布者表示有兴趣以root用户身份打开远程文件。可以使用以下命令完成此操作:
C-x C-f /ssh:you@remotehost|sudo:remotehost:/path/to/file RET
可以在这里找到更多文档:https : //www.emacswiki.org/emacs/TrampMode#toc14
一个针对远程计算机的简单答案:
如果我打算在远程计算机上完成所有emacs的工作,我会使用
ssh -X username@hostname
然后在远程会话中运行emacs,并重新显示在我的本地计算机上。这是一个古老的问题,但我想将其完整。当然存在一些xhost / X config问题,但是在许多网络中,它可以立即起作用!
您正在寻找emacs的SSH模式。
设置好之后,您就可以运行
M-x ssh RET hostname RET
然后,它两次提示您输入密码(一次输入命令行,一次输入文件)。
在大多数情况下,您可以将其像其他任何外壳一样对待(非交互式和一些细微的差别,仅此而已)。
它会跟踪您所在的目录,因此,当您要从目录中打开文件时,它会自动从正确的目录开始,而您只需要输入文件名即可。
Emacs Wiki也有更多信息。