eglot功能是不是比lsp-mode弱?

刚才在emacs29上简单配置开启了eglot。但是索引代码的时候,找不到。 有个函数 init() 同一个文件中,通过一个宏,注册到了一个变量上。类似这种:

REGISTER(node) = {
    .main_init              = init,

在init函数定义处,通过M-?查找引用。它找不到注册那一行。lsp是可以找到的。

另外,lsp有个lsp-treemacs-call-hierarchy,eglot中我也没搜到。

是缺什么配置之类的么?各位的eglot都咋配置的?

1 个赞

是的,eglot 对 lsp features 的实现就是比 lsp-mode 少,有很多的feature没有实现。

此外还有很重要的一点,eglot不支持多个lsp连接同一个buffer,作者本人似乎还表达过对实现这个功能的疑惑?他似乎认为这种情况最好是有一个外部的大 LSP 来把不同的功能分派给其他的小 lsp 了,但是很明显这种构想过于理想化了。

多个lsp server,web开发很适合。

外部lsp server不现实,因为不同lsp server响应速度不一样,来了数据就要发给emacs

多个lsp server混合用,现在只有lsp-mode和lsp-bridge支持。

1 个赞

那我先用着lsp好了。这几个功能我还是挺需要的。其他花里胡哨的可以省,索引的功能为啥要省掉,不好。

一个文件开多个lsp,我目前还没用得上。

目前lsp-mode的功能是最全的,当然也是最耗资源的,需要自行定制下,关掉一些不需要的功能。

对我而言,eglot目前最缺的是文档的显示,虽然可以借助eldoc-box,但是功能还是孱弱不少。尤其是鼠标下hover显示当前符号的文档,lsp-mode和vscode是最接近的。还有一个实用的是breadcrumb,有第三方代替: joaotavora/breadcrumb: Emacs headerline indication of where you are in a large project (github.com)。sideline、peek也有独立的包可以使用,个人用得不多。其他功能就大同小异了。eglot最大的优势就是默认集成,不用单独安装,另外确实要轻量级一些。

1 个赞

还有一点儿就是,不知道为什么 eglot 补全的准确程度差很多,我在一个函数(TypeScript)内部补全参数,lsp-mode 是正常的,但是 eglot 就会帮我在全项目中搜寻,卡很久,补全的量很大,但是我需要补全的参数,在很长很长的列表后面。

名词/术语的使用还是要严谨一些,虽然大家都知道你在说什么。

看前面的回帖,大家都没有被你影响而混淆 lsplsp-mode

我把标题更新了一下

1 个赞