基于 Company 编写了一个带中文注释的英文补全助手

但是 (add-to-list 'completion-at-point-functions #'corfu-english-helper-search) 这个是全局的,能让这行代码局部生效吗?

看 C-h v completion-at-point-functions 的文档,上面写着 Value in #<buffer ****> 。 估计它也是 buffer-local 的吧。实验了一下,add-to-list 也只会作用于当前 buffer 的 completion-at-point-functions

好的, 我改一下。

修复了,字数补丁。

1 个赞

哪里可用设置模糊补全,我现在是打错一个字母,corfu都退出

安装orderless然后根据corfu的readme配置就行,比较推荐两种方法,一种就是所有输入都可以任意顺序,这样的话候选词比较多,另一种是通过加一个特殊的按键,将这个按键前的字和按键后的字母进行模糊匹配。我自己用的是后者

不管什么算法, 在一个10万单词的词典下, 用 Elisp 实时过滤的英文补全都比较卡。

lsp-bridge 现在用 Python 多线程计算, 可以实现实时补全性能。

说的很对,我其实早就开始使用大佬的lsp-bridge替代了相当多的场景了,在词汇补全的使用场景下,10w词汇量下非常丝滑。

我还对词汇量做了测试,非常惊讶的是100w词汇量左右的速度都很流畅。超过了300w时补全较为卡顿,但是卡顿的仅仅是补全,emacs本身的运行速度并不受影响,这说明acm分离式的设计确实非常好。而且lsp-bridge可以使用拼音是一个非常好的bonus 。

1 个赞

感谢肯定。


但是Emacs社区是一个非常奇怪的社区, 大家都追求性能, 真的有性能极佳的解决方案时, 大家依然都选择company/corfu这种方案, 宁愿卡也不接受先进的多线程技术框架。

是的。更容易被接受的方案可能主要是两种,纯elisp或者是通过elisp控制外部命令行工具进行解析的方法。

对依赖外部进程进行主要控制的方式接受度比较低,不只是lsp-bridge,我注意到eaf这样优秀的甚至是整个编辑器世界独一份的框架,在reddit上的接受度都不是很好。

我个人很希望大家能排除先入为主的”门户之见”,把这些极为优秀的插件使用起来,实践出真知。

编写和使用emacs插件的最主要目的,应该是为了解决问题和推进生产力。当使用某个插件的人越来越多,它往往会有越来越好的周边生态,这会进一步放大它的实用性。lsp-bridge之类的方案由于优秀的架构,具有很高的发展上限,不仅是当下,从长期而言也无疑是值得社区投入的选择

1 个赞

纯 Elisp 的方案执行性能差、没有多线程和生成过多的GC对象

外部命令行工具解析的方式是受限于命令行工具的数据输出形式、解析大量数据输出卡Emacs, 这类插件越多越增加Emacs负担

lsp-bridge/eaf的方案本质是把所有的计算和对象存储都搬运到外部进程进行计算, Emacs只作为数据输入和结果界面显示, 这是目前实践看, 马上可以提升Emacs性能并无限扩展Emacs能力的方案。

3 个赞