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

时间:2013-12-17 01:02:26

标签: emacs ssh

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

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

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

我找到了this question,但这让我更加困惑。

6 个答案:

答案 0 :(得分:118)

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

本地计算机上运行Emacs时,通过ssh打开远程文件与打开除different syntax之外的任何其他文件没有太大区别。

对于ssh,您可以输入C-x C-f。现在,在minubuffer中,您要键入/ssh:user@host:/path/to/file(请注意,一旦开始键入路径,选项卡完成将起作用。另请注意前导/字符)。查看完整的docs here

在您的示例中,那将是:

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

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

答案 1 :(得分:22)

只需添加上面的答案,您就可以为您使用的计算机编写快捷方式 频繁:

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

这将在远程计算机上打开dired缓冲区。您可以导航此缓冲区 就像你当地人一样。

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

如果你有一堆远程机器,你可以提供一些可识别的名称 对于每个功能,例如connect-cupcakeconnect-kitkat并使用smex包完成。

答案 2 :(得分:15)

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

使用Emacs书签。 只需在访问远程文件或目录时正常创建书签。然后只需使用C-x r b跳转到您提供其名称的远程书签(完成)。

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

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

如果您使用Icicles,那么每当您使用命令跳转到书签时,您可以通过在完成期间点击C-M-@将完成候选者缩小到远程候选者。

答案 3 :(得分:5)

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

import sys try: import pandas as pd except ImportError: pass @pytest.mark.skipif('pandas' not in sys.modules, reason="requires the Pandas library") def test_pandas_function(): ...

可在此处找到更多文档:https://www.emacswiki.org/emacs/TrampMode#toc14

答案 4 :(得分:3)

专注于远程机器的简单答案:

如果我计划在远程计算机上运行所有emacs,我使用

ssh -X username@hostname

然后在远程会话中运行emacs,在我的本地计算机上显示。这是一个古老的问题,但我想把它完全抛弃。虽然有一些xhost / X配置问题,但在许多网络中,这将立即起作用!

答案 5 :(得分:1)

SSH mode for emacs正是您要找的。

设置完成后,只需运行

即可
M-x ssh RET hostname RET

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

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

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

Emacs Wiki也有更多信息。