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

一般是补全后面的那个elisp函数,可以搜索一下错误上面那一行英文提示。

现在的排序就是第一屏把lsp、yas、tabnine优先显示了, 其实已经很方便了, 不需要再折腾自定义混合排序。

1 个赞

@kongds 大佬这个补丁更新后 feat: lsp for org-babel by kongds · Pull Request #558 · manateelazycat/lsp-bridge · GitHub

设置 (setq lsp-bridge-enable-org-babe t) 后, 大家可以直接在 org-mode 直接使用 lsp-bridge 补全了,不需要额外再开窗口。

神奇的是, 如果 org-mode 里面有多段不同语言的代码, lsp-bridge 会自动根据当前代码块自动切换合适的语言。

动画效果看 https://user-images.githubusercontent.com/19282154/223733944-f4bdae12-4f41-4d29-b753-d1a03c5a214b.gif

6 个赞

这个补丁好啊。我试着给 markdown mode 也提交个类似的补丁。这样以后写 rmarkdown, quarto 之类的基于 markdown 的文学编程格式就不需要 poly-mode 了。

1 个赞

python使用miniconda或者anaconda切换虚拟环境后,lsp-bridge没办法根据当前环境进行补全,有办法吗

在emacs里使用对应的虚拟环境管理插件,先确认这个插件激活虚拟环境功能没问题,然后要确保lsp-bridge启动lsp之前先激活虚拟环境,这样lsp默认就应该用的是虚拟环境的python。

lsp内容

(use-package posframe
  :ensure t)

(use-package yasnippet
  :ensure t
  :custom
  (yas-global-mode 1))

(add-to-list 'load-path "~/.config/emacs/site-lisp/lsp-bridge")
(require 'lsp-bridge)
(global-lsp-bridge-mode)
(setq lsp-bridge-enable-log t)

打开lua文件后提示加载成功并

[LSP-Bridge] Start LSP server (sumneko) for /Users/ruandh/Documents/git/client...
[LSP-Bridge] Start LSP server (sumneko) for /Users/ruandh/Documents/git/client with ’project’ mode, enjoy hacking!
evil-forward-char: End of line
[LSP-Bridge] Content modified. [3 times]

image 首次有提示Workplace: loading xxx,再次输入就没有了 这种情况我需要先做点什么排查一下吗?我看elisp可以正常使用,lua才出现这个情况

acm有没有类似于vim中的ycm的补全方式?就是选择下一个侯选项的同时进行补全,这样就只需要狂敲下一个就行了,省了一个确认键,而且很解压 :joy:。company中有company-tng-mode,corfu似乎也是类似的补全方式,acm中我没有找到

似乎很容易,提一个issue吧,今晚没空

Doom emacs终于用上了,无论是写elisp还是写c在我的i3-8130U电脑上面已经完全不会卡了。我想问一下想修改弹出补全窗口的延时应该设置什么变量呢?

现在没办法做延迟, 因为 lsp-bridge 完全是异步设计的,多个线程在后台自动计算, 后台线程一有结果就弹出补全窗口。

如果嫌弹的太快了, 可以打开 lsp-bridge-complete-manually 选项, 然后用这个命令 lsp-bridge-popup-complete-menu 手动弹出补全窗口。

1 个赞

image

有个问题,就是在编程的过程中的diagnotics信息全部都会残留下来,不知道是什么原因。可以确定是lsp-bridge的问题

emacs -Q先对比测试一下

不知道为啥emacs -Q然后手动load所有的依赖和lsp-bridge,也启用不了lsp-bridge。而我再第二次用doom emacs的配置打开的时候又没有这个问题了。

最好给一个重现步骤

候选词的过滤有一点小问题: 我在写go的时候发现这个问题。gopls有时会返回一些包名称相同,但实际引用项目不同的候选词。 lsp-bridge会对这些候选词进行过滤,却会将最常用的那个给过滤掉。

举个例子,go中的time包: lsp-bridge 在lsp-bridge过滤剩下的这一条是并不是标准库中的time包。

在nvim中相同位置,标准库中的time一定是第一条。 nvim

只观察到了现象,还没有去研究他的原理。 这个问题可以通过关闭acm-backend-lsp-enable-auto-import来不让acm自动填写import解决。

从我的理解看, 主要是看 gopls 的参数区别, lsp-bridge 的 acm 只是一个前端, 并不会对 LSP Server 的结果进行过滤。

如果有差别, 主要要看一下 lsp-bridge 默认的 golpls 和 neovim 的 gopls 参数是否有差别?

ps看了下nvim启动的gopls,是一个命令行参数都没有的,其他参数我还不知道怎么看。

但刚才在mac上复现这个问题,发现这个包的import是不固定的,有时能正确导入time标准库,有时又出现了另外的包,好怪 :joy:

主要看你代码环境,gopls版本和gopls参数。

lsp-bridge的acm主要自动融合多个后端的补全,但是不会去过滤lsp的补全。