介绍
官方介绍: oc.nvim 为您提供全方位的 LSP 特性支持,包含智能补全、错误提示、参数提示等功能,关于 LSP 的详细特性请查看官方文档。
我的理解: coc.nvim是一个基于nodejs开发的插件平台,利用了node异步的特性快速实现各种辅助功能,相比YCM的体积大,需要编译,且巨多安装过程中的坑来说,coc可配置性高、速度快、体积小,用起来非常舒服。
安装
推荐使用 https://github.com/junegunn/vim-plug 添加
Plug ‘neoclide/coc.nvim’, {‘branch’: ‘release’}
到 init.vim 然后执行:
:PlugInstall
如果使用其它插件进行配置,请使用 release 分支代码。
配置
可通过 coc-settings.json 文件进行配置,该文件为 jconc 格式,就是添加了注释格式支持的 json。
使用命令 |:CocConfig| 打开用户配置文件,或者在项目根目录下创建.vim/coc-settings.json 文件,后者优先级更高。
执行命令 :CocInstall coc-json 安装 json 语言支持,该插件可提供配置补全和验证等功能。
下列为我的配置文件,仅供参考:
1 | { |
补全功能
因为我现在只用到了智能补全的功能,下面就先来介绍一下 coc 里面的补全功能。
这里摘抄整理自开发者的介绍,原文链接coc.nvim介绍
- 多种触发方式,同时支持手工触发。默认使用 always 自动模式表示输入单词首字母以及 trigger character 时触发补全,可配置为 trigger 模式,表示仅在输入 trigger character 时触发,或者配置为 none,表示禁用自动触发。任何触发模式下都可使用绑定的快捷键进行手工触发。
模糊匹配,智能大小写。同 YCM 等知名插件。 - 多 source 异步并发获取。同时异步获取不同 source 结果,效率更高。
支持用户自定义 source。可通过编写 viml 插件实现自定义 source, 自定义补全 source 文档
Source 管理功能。 使用命令 :Denite source 查看当前 buffer 使用 source 列表,默认回车操作切换 source 可用状态。 - 支持通过删除字符纠正错误输入。 为了提高过滤的效率,除非清空当前过滤字符,否则删除过多的字符不会导致补全停止,而是触发一次针对已有补全缓存的重新过滤。
- 尊重用户 completeopt 配置。 coc 会在补全开始后将 completeopt 设置为 menuone,noselect,noinsert 补全完成后重置初始设置,原因是使用 vim 自带的补全时,很多用户更青睐使用 menu,preview 来做为 completeopt (因为 vim 本身的补全过滤并不支持模糊匹配)。
- 支持 language server 返回的 triggerCharacters 作为触发字符。
- 支持 completion resolve 请求。用户选中 complete item 后向 server 请求详细数据,通常用做请求文档以及 textEdit 等字段。
- 支持 LSP 补全项中的 sortText,filterText 以及 insertText 字段
- 支持 LSP 补全项完成后续操作,包含 textEdit,additinalTextEdit 以及 command。
- 支持 snippet 类型补全。coc 实现了 LSP 中定义的 snippet (包含 choice 功能),无需额外安装插件,且在确认补全时自动触发。
总结
coc.nvim的生态很快的建立起来,使用感受也很不错,而且可定制性很强,vim用户的福音,如果你正在苦于YCM的安装编译问题处理,可以试试这款插件,另外其他支持都可以在github上面找到。