让Emacs支持类似于VSCode的远程开发,难度有多大?

VSCode这种工作模式,是不是大部分工作都在server端做的?比如数据处理和文件操作。本地实例变成了一个简单的客户端负责显示结果?

如果这样的话,貌似难度还可以,emacs官方有这方面的计划吗?

----------------------- 最新更新

今天试了下emacs server模式,配合ssh socket转发,成功实现了client和server分离,即两者运行在不同的物理机上。不过客户端是在wsl1里测试的,没法用GUI,理论上GUI也是可以的。

说明emacs内部已经支持远程开发机制了,只是因为通信不够安全或者其他原因,所以未开放。现在只用把通信加密一下,就直接可以用了。

这确实是个痛点, 连 server 开发这块目前确实是 vscode 最方便…

现在有了AI辅助,开发个类似这样的功能应该是问题不大的。

希望能早日支持,非常需要

trump rpc 了解下 90%场景下性能接近,可控性拉满

弄个自建的中转,打洞成功后很快的。

零难度

直接搞台机器装上 emacs 等工具,远程使用就 ssh 用 tui, 岂不美哉?这才是真正的远程开发,vs.. 等垃圾工具的远程开发,不过是假远程的儿戏

真远程是一切东西都在远程

你要是嫌远程环境难以维护/迁移麻烦,那么用 nspawn 包装下

2 个赞

想用GUI,终端的剪切板太麻烦了,配置了一下调用命令,又太卡了

这种模式,lsp服务端运行在哪里?索引文件方便吗?

并不麻烦,你可以参考下那个主题里面的评论,最近我贴了一个非常微小但奏效的配置,以解决剪贴板问题。

如果实在不想用 tui,也可以,确保你的带宽足够,然后 waypipe 转发

再不济,直接运行一个无头桌面,vnc 过去用,岂不美哉?

我试了你那个帖子里的方法,好像不行。

另外,帧率很重要,有些方法看似能用,但是体验上比较一般,比如WSL2的GUI,体验很差,不流畅

我现在工作上就是这么个使用场景:

WSL2里的GUI Emacs → TRAMP (ssh) 内网 → TRAMP (docker) 编译/运行环境

tramp-default-proxies-alist设置下就行

没用tramp-rpc,我觉得性能完全可以接受

docker里装了对应的lsp server之后eglot开箱即用

明显能感觉到慢的主要是consult-grep之类的,可以开大点异步等待时间

consult-grep类似这种,grep命令是在本地运行的还是在远端运行的?如果本地运行,那卡顿和延迟可想而知。还有lsp,分析和索引工程代码。。。

今天试了下emacs server模式,配合ssh socket转发,成功实现了client和server分离,即两者运行在不同的物理机上。不过客户端是在wsl1里测试的,没法用GUI,理论上GUI也是可以的。

说明emacs内部已经支持远程开发的机制了,只是因为通信不够安全或者其他原因,所以未开放。现在只用把通信加密一下,就直接可以用了。 @hiecaq

1 个赞

我是觉得Emacs的远程不太好用。我现在直接利用rsync同步配合ssh HOST [test-command]。利用make类工具一行执行,体验倒也还好

??? 这怎么做到的?
Emacs server 不是真正的 server 模式吧?
麻烦请你出一个使用教程…

Can TRAMP be as efficient as ssh + tmux + emacs? : r/emacs https://www.reddit.com/r/emacs/comments/dx7d9l/can_tramp_be_as_efficient_as_ssh_tmux_emacs/

You can use X11 Windows forwarding, by running an X11 server on your Mac e.g. I use Quartz, and you have to run an Emacs on your Linux server that has support for X Windows. Then to get the persistence, as you get from Tmux, you can run Emacs in “server” mode, and start each Gui instance using emacs-client.

不冲突,emacsclient 确实可以连上不在本地的 Emacs,当然因为 client 没有任何 GUI 能力只能用 TUI。

ssh本来就是加密信道,你用ssh port forward本来就是为了开放给网络用户用的,ssh login直接起tui才是管理员私用的。

gui理论上并不行,因为emacsclient并没有gui画图能力,除非你开个ssh Xforward把server端的窗口给画到client端,负责画图和事件传递的是X窗口系统,emacs内部并没有一个跟画图解耦的event层。

首先,ssh服务端的tcp转发功能要开启。然后在服务端启动emacs server。

客户端机器操作:先用ssh创建一个sock映射,即把服务端的unix sock映射到本地,比如~/.emacs.d/server/server, 然后就可以运行emacsclient了。ssh映射sock的命令如下:

ssh -L /home/remote/.emacs.d/server/server:/home/local/.emacs.d/server/server remote_user@remote_host