我知道在我调用(start-server)现有的Emacs会话后,我可以使用emacsclient -c(在同一台计算机上)创建连接到该服务器的新帧,这样创建的每个新帧emacsclient都可以访问同一组共享状态(例如缓冲区) ).
我发现的大多数文档都集中在"让我快速访问我的本地Emacs"用例,所以有两件事我还没有看到任何细节:
可以emacsclient -c访问由其他用户启动的Emacs服务器,还是仅通过硬连线检测我自己的用户启动的会话?
Emacs服务器(直接或间接)是否支持远程连接?也就是说,有没有办法设置Emacs(可能涉及SSH),允许远程机器emacsclient -c上的调用访问我的Emacs服务器的本地状态?
(如果你还没有猜到,我最终想要做的是结合上面的两种技术来提供基本的协作编辑支持.)
这是一个现实世界的问题,所以这就是我正在使用的:
su或ssh).如果它有所不同,机器在私有LAN上,安装(并运行)OpenSSH客户端和服务器,并且所有用户都可以连接到(他们自己的帐户)所有机器,但它们没有共享文件系统.
那么,有没有人知道Emacs服务器是否可以
编辑
正如在rwb的回答中所评论的那样,很明显,通过运行emacsclient -c在本地打开的新窗口实际上是由远程 Emacs服务器进程创建的.也就是说,emacsclient只是触发服务器中的相关行为.这会导致显示设置不正确的一些问题,因为服务器通常无法访问本地桌面(请参阅下文).但是,如果我使用以下命令序列,我现在可以连接到远程Emacs会话:
在一个终端中,1.22.333.44IP地址在哪里remotehost:
ssh -t -X remotehost \
"emacs -nw --eval
'(progn (setq server-host \"1.22.333.44\" server-use-tcp t) (server-start))'"
Run Code Online (Sandbox Code Playgroud)
然后在另一个(在同一台机器上):
scp remotehost:.emacs.d/server/server /tmp/server-file
DISPLAY=localhost:10 emacsclient -c -f /tmp/server-file
Run Code Online (Sandbox Code Playgroud)
该emacsclient命令使远程Emacs服务器(它找到其中的详细信息/tmp/server-file …
如果我C-xC-w (write-file)用来将当前缓冲区的内容写入新位置,那么之后我的缓冲区将访问新文件而不是原始文件.有时我想将缓冲区的副本保存到新位置,但随后在原始位置继续编辑.
我知道我可以从(write-file)迷你缓冲区历史记录中删除现有的文件名,然后在C-xC-f (find-file)提示符后立即将其重新访问以重新访问原始文件,这就是我现在使用的解决方法.然而,这感觉不够优雅.
我想知道是否(write-file)可能采用某种类型的前缀参数来访问缓冲区,但这只会影响覆盖确认.
那么:有没有更简单的方法将我的缓冲区内容保存到文件而不改变我正在访问的文件?