我希望能够在一台计算机上运行emacs:
server $ emacs --daemon
然后从另一个连接到它:
local $ emacsclient -c server
这可能吗?如果是这样,怎么办?
我希望能够在一台计算机上运行emacs:
server $ emacs --daemon
然后从另一个连接到它:
local $ emacsclient -c server
这可能吗?如果是这样,怎么办?
Answers:
您不能使用emacsclient连接到在远程计算机上运行的Emacs实例。此客户端-服务器概念与(本地)进程有关,与网络节点无关。但是,您可以使用各种网络技术登录到远程计算机,连接到在此运行的emacs服务器,并在本地显示emacsclient的屏幕。根据所使用的操作系统,可以通过SSH(终端/ X转发),VNC,RDP等完成联网。
更新:
正如某些人指出的那样,emacsclient实际上确实具有通过TCP连接到服务器的选项。但是,emacsclient绝不打算远程使用,TCP套接字选项是与非UNIX系统(即,没有UNIX域套接字的操作系统,例如Windows)兼容所必需的。
这可能不是您想要的,但以防万一,看看是否可以以某种方式帮助您。
我通常在用Vagrant引导的虚拟机中工作,我的~/.emacs.d
目录在我的计算机(本地)和虚拟机(远程)之间同步,将以下内容放入Vagrantfile
文件中:
config.vm.synced_folder "~/.emacs.d", "/home/vagrant/.emacs.d"
另外,我的Emacs配置会在启动时自动启动服务器:
(require 'server)
(setq server-use-tcp t
server-socket-dir "~/.emacs.d/server")
(unless (server-running-p)
(server-start))
因此,当我在虚拟机中启动Emacs服务器时,可以使用以下命令连接到它:
ssh -Y -i ~/.vagrant.d/insecure_private_key "<virtual machine hostname>" 'emacsclient -c -f ~/.emacs.d/server/server'
虚拟机主机名是我在〜/ .ssh / config中配置的虚拟机的主机名:
Host <virtual machine hostname>
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /home/anler/.vagrant.d/insecure_private_key
IdentitiesOnly yes
LogLevel FATAL
ForwardAgent yes
注意:在虚拟机内部启动Emacs服务器之前,请检查该~/.emacs.d/server/server
文件是否不存在(如果我只是将其删除),否则将无法正常工作。
.ssh/config
文件。您只需要指定即可Host
。如有疑问,您可以使用命令的输出:vagrant ssh-config
来设置~/.ssh/config
文件。