【问题标题】:replacing ssh+screen+editor with emacs用 emacs 替换 ssh+screen+editor
【发布时间】:2012-10-19 16:21:46
【问题描述】:

我的目标是远程编写代码。到目前为止,我一直在使用 ssh + screen + 一个编辑器(例如 vim)。

我了解使用本地 emacs(或 vim),可以编辑远程文件。但是一旦本地 emacs 关闭并且我想重新打开它(或使用另一台计算机打开它),我需要再次重新打开所有缓冲区。

有没有办法在远程机器上设置一个 emacs 服务器,我可以简单地使用本地 emacs 客户端访问它?这基本上模拟了屏幕行为。

【问题讨论】:

  • 所以在这个场景中,你在远程机器 X、Y 等上有文件,你在机器 E 上有一个 emacs 服务器,你想在机器 A、B 上实际使用编辑器, ...通过连接到 E 来查看 X 和 Y 上的文件?

标签: emacs remote-access gnu-screen


【解决方案1】:

我想你可能会在这里找到答案;

http://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.html

根据http://www.gnu.org/software/emacs/manual/html_node/emacs/emacsclient-Options.html#emacsclient-Options;

Emacs 服务器通常使用称为“本地套接字”的操作系统功能来侦听连接。某些操作系统,例如 Microsoft Windows,不支持本地套接字;在这种情况下,Emacs 使用 TCP。当您启动 Emacs 服务器时,Emacs 会创建一个服务器文件,其中包含一些 emacsclient 建立连接所需的 TCP 信息。默认情况下,服务器文件位于 ~/.emacs.d/server/ 中。在 Microsoft Windows 上,如果 emacsclient 在那里找不到服务器文件,它会在 APPDATA 环境变量指向的目录的 .emacs.d/server/ 子目录中查找。您可以通过“-f”或“--server-file”选项或通过设置 EMACS_SERVER_FILE 环境变量来告诉 emacsclient 使用特定的服务器文件。

即使本地套接字可用,您也可以通过将变量 server-use-tcp 设置为 t 来告诉 Emacs 使用 TCP。 TCP 的一个优点是服务器可以接受来自远程机器的连接。为此,您必须 (i) 将变量 server-host 设置为运行 Emacs 服务器的机器的主机名或 IP 地址,并且 (ii) 为 emacsclient 提供服务器文件。 (实现后者的一种方便方法是将服务器文件放在网络文件系统上,例如 NFS。)

当 Emacs 服务器使用 TCP 时,变量 server-port 决定监听的端口号;默认值nil,表示服务器启动时随机选择一个端口。

当然,请确保在服务器端调整您的防火墙设置,以便客户端可以连接到运行 emacs-server 的机器。

【讨论】:

  • 非常感谢您的回复。我在 redhat 和 OSX 机器上都试过了,但都没有在 ~/.emacs.d/server 中留下服务器字段,并且都没有设置它们的 APPDATA。
  • 比调整防火墙设置好,可以使用ssh转发一个端口:
  • @chaiy FWIW 我刚刚在带有 GNU Emacs 的 OSX 上尝试过这个,只要你在(server-start) 之前(setq server-use-tcp t) 我会在~/.emacs.d/server/server 得到一个包含服务器信息的文件。到目前为止,我从来没有遇到过问题,但不幸的是,我一直无法将远程客户端连接到服务器。
  • @RandyMorris 感谢您的尝试。我有一个同事也在尝试这个。但他也没有拿到文件。也许它是不同版本的emacs?我们尝试了 macports 一个和独立的一个,但似乎没有一个在 .emacs.d 中留下服务器文件夹......
  • 我用自制软件构建了emacs,可能值得一试。
【解决方案2】:

我已经多次尝试过其他帖子中提到的方法,但从未成功过。

emacs 能够做的一件好事是桌面保存模式,它会在您终止 emacs 时存储所有打开的缓冲区,并在您再次打开 emacs 时恢复它们。默认情况下,它不会恢复流浪汉缓冲区,但您可以调整设置以允许这种情况发生。更多信息可以在this Stack Overflow问题中找到。

【讨论】:

  • 感谢您的回答。但这与在本地计算机上运行守护程序几乎相同(如果您从不重新启动计算机)。我更多的是寻找可以更改客户端计算机的解决方案。
【解决方案3】:

您可以在本地登录,然后通过 ssh 连接到远程计算机。在远程机器上,您可以进行“可以加入的屏幕会话”。在本次会议中,您运行了 emacs,所有缓冲区都与您离开时一样。您也可以结合使用桌面保存,以防远程机器需要重新启动,您可能会丢失会话。这是我使用的最实用的解决方案。您可以随时更改“客户端计算机”。您不需要使用本地 emacs 客户端。您还可以为不同的项目创建多个会话,并在不同的终端上为特定项目加入屏幕会话。

【讨论】:

  • 这是我描述为 ssh+screen+editor 的设置,我也一直在使用。但是我在让 shell 向上滚动和跨标签复制/粘贴工作时遇到了一些麻烦。所以我想也许在你的本地机器上编辑远程文件可能会更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-06
  • 2021-05-19
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多