coc.nvim 是一款针对 neovim 所开发的智能感知插件,设计目标是基于微软的 language server protocol 协议,为用户提供全面、可靠的智能感知体验。
鉴于智能补全算是智能感知当中最重要的部分,本文就先来介绍一下 coc 里面的补全功能。
- 多种触发方式,同时支持手工触发。默认使用 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 功能),无需额外安装插件,且在确认补全时自动触发。
snippet 参数补全同时通过 additinalTextEdit 插入 import
已内置 source 列表
- around - 当前 buffer 单词列表
- buffer - 所有正常 buffer 单词列表
- dictionary - ‘ dictionary ’ 选项文件内单词列表
- tag - tag 文件单词列表
- file - 文件路径补全
- omni - 调用 ’ omnifunc ‘ 函数提供补全
- word - google 10000 单词列表
- emoji - emoji 字符表情
- include - 文件引用路径补全
- ultisnips - 代码块 ultisnips 补全
- neco - 使用 neco-vim 进行 viml 补全
有待改进的地方
neovim 的 remote 插件确实不那么容易安装,对此我暂时也没想到好的办法,或许将来 deno 可以解决。
项目使用微软设计并开源的 typescript 进行开发并且借鉴了微软 VSCode 部分设计,同时使用了相当数量的微软代码以及微软提供的 node 模块,在此要特别感谢微软对于开源的大力支持。
coc.nvim 安装方法
配置 vim 补全
coc.nvim 的基本功能已经就绪,文档部分还有所欠缺,欢迎体验~