可以写一个强制刷新缓存的命令。 我觉得添加新的模板行为比较低频,我一般是配置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)
如下图
奇怪你的应该也是mac 啊,为啥你的补全框就不会闪烁,我的就一直在闪
我的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下就不会闪烁了
也许你的lispy-mode下某一个hook绑定了什么function,每次已输入就刷新frame之类的
试了 解决了
关键,我看了一圈,没啥头目。
因为 self-insert-command
被 remap 了, 你得手动添加 lispy 相关的命令到 acm-continue-commands
里, 类似于这样
(add-to-list 'acm-continue-commands "\\`special-lispy-")
完美解决, zsbd
大佬,我更新了下代码,补全lsp-message信息提示这个:
看下readme,底部有针对这种情况的调试方式
怎么解决的?我觉得可以把修复方案合并入lsp-bridge