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

dabbrev 对于非语义的补全非常方便,但是 dabbrev 的算法性能非常差,特别是当它搜索所有 buffer 并提取单词的时候非常耗性能, 再加上当前输入的关键字和所有单词做对比性能就更慢了,甚至会卡手。

今天实现了一个新的后端 acm-backend-search-words, 用来替换 acm-backend-dabbrev, acm-backend-search-words 后端的原理是, Emacs告诉 Python 进程哪些文件被打开了, Python 进程就开一个子线程在后台计算每个文件的单词, 并对提取的单词进行清洗、去重和排序。

当我们在Emacs输入字符时, acm-backend-search-words 会开启一个新的线程用于对比输入字符和所有单词, 只把匹配的单词返回给 Emacs 来实现 dabbrev 同等功能。

相对于 dabbrev 的优势主要有两点:

  1. 实时性能, 实时补全不卡Emacs
  2. 针对 foo-bar-new 的情况, 如果搜索不到 foo-bar-* 开头的单词, 会把 foo-bar-new 拆开, 针对 new 进行二次搜索, 特别方便你要创建新变量同时变量最后一个单词其实存在于Emacs的情况

再也不用 dabbrev-expand 按到手抽筋了, acm-backend-search-words 对于写 elisp 代码超级爽。

6 个赞