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

可以写一个强制刷新缓存的命令。 我觉得添加新的模板行为比较低频,我一般是配置lang的时候一并就做了。后面需要就添加或者修改一次然后强制刷新。

你把 GitHub - AndreaCrotti/yasnippet-snippets: a collection of yasnippet snippets for many languages 这个项目下载下来, 然后把 yasnippet-snippets//snippets 目录加入到 yas/root-directory 中, 你就可以测试出来 yas–get-snippet-tables 非常卡。

本质是 yas–get-snippet-tables 这个函数的实现是有问题的, 获取一个目录下所有的模板文件不可能卡。

这也是 acm 的 yasnippet 后端不用 yas–get-snippet-tables 的原因。

emacs (expand-file-name "~/.TabNine/") C:\msys64\home\Administrator\.TabNine

好的, 感谢, 我一会看看, 能否改一下代码。

我试了,只加载yasnippet-snippets这一个源,我自己的snippets我没用,一点不卡。 我打开go-mode,随便输入,很流畅。我可以百分百确定一定是你当时的配置的其他部分出了问题。不是这个函数的问题,这个函数只是获取当前mode的snippet table,规模不大,不应该成为瓶颈的。

我写了一个补丁 Support TabNine path for Windows platform. · manateelazycat/lsp-bridge@a239027 · GitHub 支持Windows的 HOME 环境变量, 可以更新试一下, 有问题继续反馈, 谢谢。

yas–get-snippet-tables 这个函数在我这边, 会返回所有模式对应的模板的内容, 从结果看, 模板太多, 一下打开这么多文件并展开内容本身就会卡。

你的 yas–get-snippet-tables 返回什么内容?

我在lisp-interaction-mode下执行,得到的是一个119k,包含 fundamental, prog-mdoe,emacs-lisp-mode, lisp-interation-mdoe的snippets,没有得到其他mode的snippets。真的奇怪。

这是我的测试配置

(require 'markdown-mode)
(require 'posframe)

(require 'yasnippet)
(yas-global-mode 1)

(require 'yasnippet-snippets)
(yasnippet-snippets-initialize)

(require 'lsp-bridge)
(global-lsp-bridge-mode)
(setq acm-enable-quick-access nil
      acm-enable-tabnine nil
      acm-backend-yas-candidates-number 10
      acm-snippet-insert-index 0)
(setq lsp-bridge-enable-diagnostics nil)

如下图 new

奇怪你的应该也是mac 啊,为啥你的补全框就不会闪烁,我的就一直在闪

1 个赞

我的emacs 版本,也许你可以试一试。

brew tap daviderestivo/emacs-head
brew install emacs-head@29 --with-cocoa --with-native-comp --with-native-full-aot --with-imagemagick --with-xwidgets

找到问题了,是lispy-mode导致的, 我不启用lispy 在elisp mode下就不会闪烁了

1 个赞

也许你的lispy-mode下某一个hook绑定了什么function,每次已输入就刷新frame之类的

1 个赞

试了 解决了

1 个赞

关键,我看了一圈,没啥头目。

因为 self-insert-command 被 remap 了, 你得手动添加 lispy 相关的命令到 acm-continue-commands 里, 类似于这样

(add-to-list 'acm-continue-commands "\\`special-lispy-")

完美解决, zsbd

大佬,我更新了下代码,补全lsp-message信息提示这个: image

看下readme,底部有针对这种情况的调试方式

怎么解决的?我觉得可以把修复方案合并入lsp-bridge