4

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

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

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

4

3 回答 3

4

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

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 的机器。

于 2012-10-19T16:31:42.250 回答
1

我已经多次尝试过另一篇文章中提到的方法,但从未取得任何成功。

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

于 2012-10-19T17:25:49.030 回答
0

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

于 2012-10-19T21:23:26.537 回答