lsp-bridge -- 速度最快的语法补全插件

我的理解是 lsp-bridge 会自己判断是单文件还是项目吗,但是我运行 lsp-bridge-mode 时就是在项目根目录

你项目是git管理的吗?

我试了下 gopls 好像就是会启动两个,不过应该不是问题,有一个正常的和一个内存占用很低的。

查看 message 发现 lsp-bridge 应该是运行在项目下

[LSP-Bridge] Start LSP server (gopls) for /home/l/Sync/foo...
[LSP-Bridge] Start LSP server (gopls) for /home/l/Sync/foo complete, enjoy hacking!

但是手动启动 lsp-bridge-mode 的话确实是跳转到定义后需要再次手动为当前 buffer 启动 lsp-bridge-mode 才能用

我完全没有看懂你在怎么用,你就把 lsp-bridge 加到 mode-hook 里面不就行了吗?请看一下 README

说实话我不是很看好用LSP来做代码高亮。这个对lsp的性能的要求应该比补全还高,而且高亮要是一出问题,太容易搞崩客户端了,不像补全,补全出问题至少输入还是能正常的。还是treesitter比较好,静态,快速,而且语法高亮性能至少有lsp 90%,只有少数需要动态的内容不行。而且如果没有lsp,甚至可以把treesitter当ctags来用来补全。treesitter补全的话,不说智能程度,性能应该是和ctags一个级别的,但智能程度秒杀ctags,我估计也能有lsp的五六分智能程度

gopls 起两个是用了 remote 参数,相当于会有一个默认的作服务器,之后起的 go 项目都会起一个代理和这个服务器通信,为了节省内存

2 个赞

也可能只是把 lsp 高亮作为一个补充。

我是通过 M-x lsp-bridge-mode 启动的,对于不同的 go 项目,大部分时候我还是会使用 eglot(因为 lsp-bridge 不支持 tramp),所以我不会把 lsp-bridge 加到 mode-hook 中。

2 个赞

赞,以前还真没了解过这个

这个补丁的作用是当光标移动到参数区域的时候,自动在 minibuffer 中显示参数帮助信息,现在只是纯文本,熟悉 eldoc 的大佬可以移植一下, 说不定会根据参数的位置高亮当前的参数信息。

2 个赞

想添加imenu的支持,大家有相关资料推荐吗 :rofl:

imenu 不是好的吗? tree-sitter 比较适合弄吧。

Tree-Sitter 代码用例可以参考我写的三个插件:

因为之前使用eglot的时候,eglot是通过lsp来提供imenu-create-index-function函数的实现才有这个想法的。tree-sitter目前没有使用,可以研究一下。

1 个赞

是的,我发现bridge没这个,所以不太习惯。

我自己不喜欢打开侧边栏,这玩意影响性能不?

我也不用侧边栏,eglot是做成了类似下面这种。

我一般都用这东西,快速跳转当前文件的变量 :rofl:

性能影响感觉上还行,因为使用eglot的时候就第一次创建索引会慢一点,会面都是秒开了。

因为imenu-create-index-function函数要求是同步返回数据,我找找有没有异步更新的。

内置就有这个吧?我之前是嫌 lsp 生成的 imenu 太啰嗦,直接关了,用内置的

emacs默认就要这些呀,为啥要用lsp?

有一些情况mode自带的imenu生成函数不太能满足需求,比如说js,默认只能识别到function , class里面识别不了。

下面这个是eglot提供的imenu-create-index-function函数生成的结果。


刚试了下默认的,python, css之类的支持很好,java支持method。

或许可以不使用 lsp提供的documentSymbol :rofl: