关于Emacs传统使用模式与LSP使用模式兼容的问题

首先声明,我仅仅是emacs之前的爱好者,现在不用了。

在出现lsp之前,大家使用emacs往往是始终启动一个进程,好几个月都不关闭,这种使用模式我也是比较羡慕。

但是现在开发项目,一个项目会启动一个lsp server,并且有很多使用方式也是项目级别的,比如find files什么的,都是在一个git项目(或者Cargo.toml项目类似的)里面进行查找。

我感觉这种模式与Emacs之前的那种使用模式会有所冲突(这个是我没了解全面的结果,所以需要请教大家),我知道会有一些项目管理的插件,但是在开发多个项目的时候,需要频繁的切换项目吧?之前的lsp server会常驻吗?大家是这样使用的吗?这样方便吗?

你问晚了,现在 lsp 都是 coding agent 在用了,Emacs 里也不用 lsp 了,纯用来看diff

6 个赞

現在我都是開多個server,一個project一個server,然後用emacsclient連接就好了

1 个赞

那确实,我现在折腾工具感觉也纯属某种情怀,主要的代码都是ai来写的

看起来你跃跃欲试。

不需要任何额外的项目管理插件,内置的 project.el 就允许你在项目中执行 打开文件,切换 buffer, 搜索替换等功能

切项目有命令 project-switch-project

至于异步,只要 lsp 服务器给力,那么在 eglot 下几乎没有什么延迟

现在 emacs 对于 lsp 有一等的支持(eglot),“一个项目会启动一个lsp server”,这正是它的工作方式

至于 lsp 进程,也是有项目意识的,不必担心

1 个赞

但其实如果只用 LSP 的话,lsp-bridge 应该会比 eglot 和 lsp-mode 更好吧?毕竟从设计之初就考虑到了异步。


所以可不可以理解为,现在 eglot 其实已经够用了,没有必要上 lsp-mode 和 lsp-bridge?

他们都是同生态位,不是什么低阶高阶的关系。

都不用了有啥好问的……?

Emacs 里切项目很方便。或者说根本不用切,反正都在一个 emacs 进程里,切 buffer 就是切 project。lsp server 的生命周期和 project file 绑定,最后一个被托管的文件关闭后 lsp server 自动退出。

1 个赞

不过还是不太清楚这几个 client 实现在技术上的区别在哪里。(lsp-bridge 我了结果,是为异步而设计的,也重构了一套与适配异步的补全系统 acm)

我觉得你没必要纠结实现上技术细节,你只是用一个工具,都试用一遍,选择自己喜欢的就行。