【问题标题】:What is the best way to open remote files with emacs and ssh使用 emacs 和 ssh 打开远程文件的最佳方法是什么
【发布时间】:2014-01-04 14:48:50
【问题描述】:

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

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

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

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

【问题讨论】:

  • 有哪些有效的命令示例? (有时远程机器上存在不同的键绑定 - 检查远程机器上的 .emacs 文件 - 有时整个键的工作方式不同 - 例如,GNU 屏幕默认情况下会在到达 emacs 之前吸收Ctrl-A part of a command。)
  • C-空间,C-F,C-g 工作
  • 我现在在远程机器上找不到 .emacs 文件,但我知道我没有在另一台机器上进行任何新的键绑定
  • 是的,我不确定是什么导致这组键绑定不起作用。 emacs 是否在远程服务器上打开文件in the same mode,因为它会在本地打开它(所有命令都在其中工作)?也许this 可以提供线索-M-x describe-mode
  • 您是否也在本地机器上运行 emacs?您是否有任何理由要使用远程 emacs 与本地 emacs?

标签: emacs ssh


【解决方案1】:

我通常更喜欢从本地 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 编辑远程文件,同时使用本地配置和任何已安装的包等...

【讨论】:

  • OP 可能有兴趣知道此功能被称为:tramp,它是您将使用的最有用的东西之一。它甚至可以远程编译!
  • 这很好用,所有命令似乎都可以工作,但我看到它不允许我编辑index.html,因为它说缓冲区是只读的。但是如果我在远程计算机上打开,我可以编辑同一个文件。顺便说一句,当我用C-x C-f /ssh:user@host filename 打开文件时,它问我密码。
  • 我尝试了 Documents 目录中的另一个文件,我可以毫无问题地编辑该文件。
  • 你知道如何用这个指定端口吗?
  • @PhilipKirkbride 完整记录的语法是/method:user@host#port:filename
【解决方案2】:

只是为了添加到上面的答案,您可以为您使用的机器编写快捷方式 经常:

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

这将在远程机器上打开一个dired 缓冲区。您可以导航此缓冲区 就像本地人一样。

如果你已经为远程机器设置了 ssh 密钥,你甚至不必输入密码。

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

【讨论】:

  • 这很棒。我会试试看。对于我在上面评论中提出的问题,您是否也有答案:如果我在远程机器上打开它,我可以编辑这个文件/usr/share/nginx/html/index.html;但是当我用 ssh 打开它时,index.html 是只读的。这是为什么呢?
  • 我猜你没有连接root用户,通常只有他可以写信给/usr/share/
  • 但是如何以 root 用户身份连接?我尝试了一些类似C-x C-f /sudo ssh:user@host filename 的方法,但都不起作用。
  • 这是我前段时间尝试解决但没有成功的问题。我可以使用 tramp 连接到远程,或以 sudo 连接到本地,但不能同时使用两者。一种解决方法是让自己成为具有chown/usr/share/nginx/html/ 文件夹的所有者。
  • 我打开文件/etc/nginx/sites-available/example.com.conf 并编辑它并保存并关闭它。现在我再次打开它,这一次我不能编辑它?我认为它必须与权限有关。你能帮我理解为什么会这样吗?
【解决方案3】:

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

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

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

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

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

【讨论】:

    【解决方案4】:

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

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

    ssh -X username@hostname
    

    然后在远程会话中运行 emacs,显示在我的本地机器上。这是一个老问题,但为了完整起见,我想把它扔进去。当然存在一些 xhost / X 配置问题,但在许多网络中,这将立即生效!

    【讨论】:

      【解决方案5】:

      SSH mode for emacs 是你要找的。​​p>

      一旦你设置好了,你就可以运行

      M-x ssh RET hostname RET
      

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

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

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

      Emacs Wiki 也有更多信息。

      【讨论】:

        【解决方案6】:

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

        C-x C-f /ssh:you@remotehost|sudo:remotehost:/path/to/file RET

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

        【讨论】:

          猜你喜欢
          • 2013-10-17
          • 2010-09-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-11
          • 2021-05-31
          • 1970-01-01
          • 2010-09-14
          相关资源
          最近更新 更多