当下我感觉到的 emacs 最大痛点: tramp-mode 太慢

明明远程主机就是局域网下的主机, 用 tramp-mode 打开文件或者搜索文件我都感觉有个几秒的延迟. 对比 vscode, vscode 真的让你感觉不到这是远程主机, 感觉好像就是本地访问一样流畅.

lsp-bridge 支持远程文件编辑, 性能超快。

依赖 tramp-mode 么(主要是如果还是要用 tramp-mode, 我感觉慢就是必然的了)? 比如说打开文件需要用 /ssh:server:path 这种语法么?

不依赖任何其他Emacs插件, 看 lsp-bridge 远程代码补全

1 个赞

大佬大佬, 抱歉还有个问题, 远程是不是需要装 emacs(我看说需要安装 lsp-bridge, 这不就意味着需要装 emacs)?

不需要装Emacs, 你仔细看我README和上面的文章。

远程只需要启动 lsp-bridge 的Python模块, Python模块需要读取Emacs配置的时候, 可以从远程往回调用到本地来执行Elisp代码。

仔细读README的文档吧。

1 个赞

还有个问题, 是否支持 ~/.ssh/config 呢? 比如 ~/.ssh/config 中有:

Host server
  HostName 192.168.3.3
  User xxx
  Port 22

能否用 server:/path? 如果不能的话, 怎么 proxyjump 呢(因为我得先用 ssh 连到跳板, 再用 ssh 连到服务器, 如果支持 .ssh/config, 就可以用 proxyjump)?

目前不支持 ~/.ssh/config

一个问题 这个是否支持 远程windows?

试一下就知道了

远程装一个emacs,用ssh -X登录是终极解决方案,局域网内速度快的和本地没有任何区别。

sshfs也挺好的要不试试?

但是搜索文件性能会不会比较差?

像搜索这种代码肯定是要放在本地的,你要用本地工具去搜索远程服务器上的文件它总得把要搜索的所有文件下载到本地吧,怎么都快不了。

如果是个人的测试环境可以考虑把代码放在本地,然后在远程服务器上用 sshfs 挂载你个人机器上的目录,当然这样你的个人机器就不能关机了,不然远程服务器就跪了。

另外,在编辑比较频繁的情况下,可以考虑本地跑个脚本开个 while 循环,不停地 rsync 本地文件到远程服务器。

我觉得 tramp 问题的根源恰恰是 tramp 最大的“优点”:tramp 想把 remote access 做成 transparent 的,让尽可能多的包开箱即用,让包作者偷懒。

然而 remote 和 local 本身就是有极大区别的,无论如何掩盖这一点,这区别也会被用户感知到,更何况 tramp 本身还会造成不小的 latency。我觉得默认行为就应该改成:除非 package 显式请求 remote access,否则就不应该提供任何支持。而目前的现状是包作者在发现性能问题时需要手动 opt-out,如果我没理解错的话。

一个例子就是 projectile,它会调用 locate-dominating-file 确定 current project——然而如果透过慢速 ssh 访问文件的话,就要痛不欲生了……

1 个赞

是的, 但我根本不需要那么多, 其实远程访问, 我最需要的只有这几个功能:

  • consult-find 类似的, 搜索某个文件
  • consult-ripgrep: 搜索查找内容
  • 打开某个文件

我知道 consult-ripgrep tramp-mode 是在远程做的(因为它让我在远程装上 ripgrep), consult-find 我猜测也是, 但我不理解为什么那么慢, 传一个请求再传一个结果而已.

打开文件我就更不理解为什么延迟那么大了, 传输文件应该很快的啊.

vscode 那么快肯定有部分原因是会安装 remote-server, 不知道 emacs 有没有包借鉴这个想法.

我自己的理解是:tramp 默认行为是每次传输文件/每次调用命令都开启一个新 ssh connection,建立连接的时间就很长了(我自己的一个服务器需要好几秒才能建立连接,用 remote server 形式的话可以省掉这些时间)。tramp 手册里有一些提高性能的办法,比如 ControlPersist 、改用 rsync connection method 什么的,有效但在各种第三方包的轰炸下也没那么有效了。

文件传输本身确实不算慢,如果尝试用 emacs -q 打开远程文件其实往往还挺快的,问题就是别的包没有 opt-out 的话会自动在远程文件上生效(比如上面说的 projectile)。

同样期待有大佬出手做一个正经的 remote-server!

1 个赞

lsp-bridge 已经实现了, 关键不是 SSH 的问题, SSH非常快。

关键是, 每次文件改动要传 text diff 到远程同步文件, 而不是像 tramp 那样用 rsync 在后台同步, rsync 一个操作的耗时要远远大于手指敲击的时间间隔。

lsp-bridge 现在已经完全实现 VSCode 远程编辑的性能。

在远端服务器装个emacs,如果没安装权限可以自己源码编译一个在自己的账号目录下