coc.nvim介绍

介绍

官方介绍: 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
{
"suggest.snippetIndicator": "",
"suggest.enablePreview":true,
"initializationOptions": {
"cache": {
"directory": "/tmp/ccls"
},
"clang": {
"resourceDir": "/Library/Developer/CommandLineTools/usr/lib/clang/10.0.1",
"extraArgs": [
"-isystem",
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/V1",
"-I",
"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/"
]
}
},
"tsserver.enableJavascript": true,
"languageserver": {
"efm": {
"command": "efm-langserver",
"args": [],
"filetypes": ["vim", "eruby", "markdown"]
},
"flow": {
"command": "flow",
"args": ["lsp"],
"filetypes": ["javascript", "javascriptreact"],
"initializationOptions": {},
"requireRootPattern": true,
"settings": {},
"rootPatterns": [".flowconfig"]
},
"golang": {
"command": "gopls",
"args": [],
"rootPatterns": ["go.mod", ".vim/", ".git/", ".hg/"],
"filetypes": ["go"]
},
"clangd": {
"command": "clangd",
"args": ["--background-index"],
"rootPatterns": ["compile_flags.txt", "compile_commands.json", ".vim/", ".git/", ".hg/"],
"filetypes": ["c", "cc", "cpp", "objc", "objcpp"]
},
"foo": {
"module": "/usr/local/lib/node_modules/foo/index.js",
"args": ["--node-ipc"],
"filetypes": ["foo"],
"trace.server": "verbose",
"rootPatterns": ["root.yml"],
"execArgv": ["--nolazy", "--inspect-brk=6045"],
"initializationOptions": {
},
"settings": {
"validate": true
}
},
"python": {
"command": "python",
"args": [
"-mpyls",
"-vv",
"--log-file",
"/tmp/lsp_python.log"
],
"trace.server": "verbose",
"filetypes": [
"python"
],
"settings": {
"pyls": {
"enable": true,
"trace": {
"server": "verbose"
},
"commandPath": "",
"configurationSources": [
"pycodestyle"
],
"plugins": {
"jedi_completion": {
"enabled": true
},
"jedi_hover": {
"enabled": true
},
"jedi_references": {
"enabled": true
},
"jedi_signature_help": {
"enabled": true
},
"jedi_symbols": {
"enabled": true,
"all_scopes": true
},
"mccabe": {
"enabled": true,
"threshold": 15
},
"preload": {
"enabled": true
},
"pycodestyle": {
"enabled": true
},
"pydocstyle": {
"enabled": false,
"match": "(?!test_).*\\.py",
"matchDir": "[^\\.].*"
},
"pyflakes": {
"enabled": true
},
"rope_completion": {
"enabled": true
},
"yapf": {
"enabled": true
}
}
}
}
}
}
}

补全功能

因为我现在只用到了智能补全的功能,下面就先来介绍一下 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上面找到。

-------------本文结束,感谢您的阅读-------------