今天看了一下 coc.nvim 的配置和使用, 挺不错的 VIM 插件, 记录一下.

我之前也使用到了这个插件, 主要是用来做补全的. 今天想使用 git blame 功能的时候, 又看到了它. 想搞搞明白, COC 到底是个什么东西.

什么是 COC

COC 就是一个 VIM 的插件啦. 但它是一个管理插件的插件.

和 Plug 不同的是, 它只能管理 COC 系列的插件~ 严格来说, 应该不能算是 VIM 插件吧, 应该算是 COC 的插件, 我的感觉是这样. 因为只能用 COC 来安装, 而且是安装在 COC 自己的目录下面的.

COC 系列的插件有不少, 除了自动补全外, 还有比如 coc-go , coc-python, coc-git 啥的, 可能可以取代 vimgo , python-mode, vim-fugitive 等插件, 但我只装了 git 插件. 作者也说了, 用不用 COC 系列插件, 还是要看你的需求是什么, 看 COC 的插件是不是能满足你的需求, 如果不行的话, 还可以给作者提需求~~

为什么需要它

作者的说法是: 快,稳定,功能全, 而且和 VSCode 插件一样好用易用(这一点让我有点诧异, 因为我觉得 VIM 插件挺好用啊)

这里需要提一个”功能全”这点, 之所以这么说, 因为它实现了完全的对LSP的支持. 那什么是 LSP 呢?

LSP 是 language-server-protocol

我简单说一下吧(其实我还没有搞懂其中一些细节,比如每种语言的协议是不是一样的,在哪里有具体的定义), 在没有 LSP 之前呢, 如果我们写 Python 程序, 需要编辑器提供各种功能, 像补全啊, 格式化啊, 纠错啊等等. 每种编辑器可能都有自己的实现方式.

LSP 呢, 提供了一套协议和标准. 对补全啊等等功能放在 Server(不是 HTTP Server 啊) 这里, client 通过标准统一的接口去 server 取得结果. 这样一个 server 实现之后, 所有的工作, 不管是 Vscode, 还是 Vim, 或者其他工具, 都可以方便的使用这个 Server 来接口.

而且 LSP 发展很快, 我看 Python 已经有三个实现了.

安装使用

安装使用挺简单, Readme 里面都有说, 我这里就略过吧.

COC-List

最后需要提一下COC-List, coc 主页上面专门提到了它, 看来作者应该也觉得这是一个挺好, 而且重要的功能.

很多时候呢, 我们需要对一个列表进行操作, 比如 buffers 列表, 我们可能需要选中, 删除等操作. 但是 VIM 自带的 buffers 列表功能太单一了, 就是展示出来, 也不能过滤搜索. 还有其他一些列表(比如marks) 也是如此, 还有一些没有列表, 像 searchhistory

COC-List 就是增强了列表的功能, 提供了丰富的列表, 见https://github.com/neoclide/coc-lists, 而且其他一些插件, 像 coc-git 也提供了一些它自己的列表功能, 都可以使用 Coc-List 功能来展示和操作.