ncm2/ncm2 的前身是 roxma/nvim-completion-manager (ncm)
为了更加可拓展,更加专注于代码补全,清理历史遗留代码,我重写了 ncm。部分变化列 举如下:
- 原本内置的 sources,snippet 集成,还有 subscope 代码检测全部移出 ncm2 repo, 作为独立插件维护。ncm2 本身的代码更少,更加独立可拓展和可维护。
- 引入 roxma/nvim-yarp,ncm2 不再管理异 步进程。source 插件可以自由选择异步模型,对 vimscript 配置更加灵活友好,对异 步操作的性能提升也更有帮助。
- 清理代码过程中发现了一些更加干净,简单的内部实现
- 比如移除了定时器逻辑,优化了缓存逻辑
- 比如 completeopt 更加灵活可配置
- 对 unicode 字符更加友好
以上主要是实现上的变化,作为插件使用者应该感受不太清晰,以下列举一些更容易看得 见的变化:
- Language Server Protocol 方面
- 优化了对 autozimu/LanguageClient-neovim 集成的 snippet 支持,效果近乎完美(参数展开,auto import )。理论上可以 自由选择你喜欢的 vim snippet 引擎,比如已经支持的 Ultisnips,和 vim-snipmate。
- 新增加对 vim-lsp 补全功能 的集成。snippet 支持同上。
- 更加好用的 fuzzy 匹配,目前有 abbrfuzzy 和 substrfuzzy
- 我日常写 C/C++ 比较多,所以基于 libclang 写了一个补全插件 ncm2-pyclang ,因为有了缓存,所以速 度表现会比基于 clang -cc1 实现的 [ncm-clang]( https://github.com/roxma/ncm-clang] 更好,并且支持 goto declaration 和 头文件不全。后续还有更多的优化计划。
Gif demo:
