nvim/pack/acp/start/coc.nvim/doc/coc.cnx

1770 lines
45 KiB
Text
Raw Normal View History

2020-10-30 13:36:11 +00:00
*coc-nvim.txt* 基于 LSP 的 vim 智能引擎
版本号: 0.0.57
作者: Qiming Zhao <chemzqm at gmail.com>
开源协议: MIT license
内容 *coc-contents*
介绍 |coc-introduction|
依赖 |coc-requirement|
安装 |coc-installation|
设置 |coc-configuration|
补全 |coc-completion|
接口 |coc-interface|
快捷键 |coc-key-mappings|
变量 |coc-variables|
函数 |coc-functions|
命令 |coc-commands|
自动命令 |coc-autocmds|
高亮 |coc-highlights|
列表 |coc-list|
列表命令 |coc-list-command|
列表配置 |coc-list-configuration|
列表映射 |coc-list-mappings|
列表源 |coc-list-sources|
地址列表 |coc-list-location|
插件列表 |coc-list-extensions|
错误信息 |coc-list-diagnostics|
大纲列表 |coc-list-outline|
项目内符号搜索 |coc-list-symbols|
服务列表 |coc-list-services|
命令列表 |coc-list-commands|
链接列表 |coc-list-links|
补全源列表 |coc-list-completion-sources|
已安装列表 |coc-list-lists|
状态栏支持 |coc-status|
手动 |coc-status-manual|
Airline |coc-status-airline|
Lightline |coc-stauts-lightline|
常见问题 |coc-faq|
更新日志 |coc-changelog|
==============================================================================
介绍 *coc-introduction*
coc.nvim 为您提供全方位的 LSP 特性支持,包含智能补全、错误提示、参数
提示等功能,关于 LSP 的详细特性请查看官方文档:
https://microsoft.github.io/language-server-protocol/
由于社区提供 language server 能力有限coc.nvim 同时提供了加载插件的能力,
部分插件由 VSCode 插件改写,提供与 VSCode 一样,甚至更多的功能。例如:
https://github.com/neoclide/coc-tsserver
coc.nvim 使用 coc-settings.json 文件进行配置,该文件格式与工作方式与 VSCode
完全相同,你可以安装 coc-json 插件来提供配置的补全、验证等功能。
与 VSCode 一样,大部分设置在修改保存后立刻生效,不需要重启操作。
==============================================================================
依赖 *coc-requirement*
Neovim >= 0.3.2 或 Vim >= 8.0.1453
NodeJS https://nodejs.org/ >= 10.12.0
==============================================================================
安装 *coc-installation*
推荐使用 https://github.com/junegunn/vim-plug 添加
>
Plug 'neoclide/coc.nvim', {'branch': 'release'}
到 `init.vim` 然后执行: >
:PlugInstall
如果使用其它插件进行配置,请使用 release 分支代码。
==============================================================================
配置 *coc-configuration*
可通过 `coc-settings.json` 文件进行配置,该文件为 jconc 格式,就是添加了
注释格式支持的 json。
使用命令 |:CocConfig| 打开用户配置文件,或者在项目根目录下创建
`.vim/coc-settings.json` 文件,后者优先级更高。
执行命令 `:CocInstall coc-json` 安装 json 语言支持,该插件可提供配置补全
和验证等功能。
==============================================================================
补全 *coc-completion*
补全默认是自动触发的,你可以根据自己喜好进行调整。
关闭自动补全: >
"suggest.autoTrigger": "none",
<
进入插入模式即触发自动补全: >
"suggest.triggerAfterInsertEnter": true,
调整补全超时时间: >
"suggest.timeout": 500,
<
补全开启时选中第一项: >
"suggest.noselect": false,
保留使用当前的 `completeopt`
>
"suggest.keepCompleteopt": true,
<
注意: 如果你的 completeopt 包含 menu 选项,自动补全将被关闭。
让 vim 弹出预览窗口: >
"suggest.enablePreview": true
<
设置最少补全触发字符数: >
"suggest.minTriggerInputLength": 2
<
支持提交字符特性: >
"suggest.acceptSuggestionOnCommitCharacter": true
<
改变代码片段的提示字符: >
"suggest.snippetIndicator": "⭐︎"
------------------------------------------------------------------------------
定制补全体验
使用 <tab> 触发补全: >
function! s:check_back_space() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~ '\s'
endfunction
inoremap <silent><expr> <TAB>
\ pumvisible() ? "\<C-n>" :
\ <SID>check_back_space() ? "\<TAB>" :
\ coc#refresh()
使用 <c-space> 强制触发补全: >
inoremap <silent><expr> <c-space> coc#refresh()
<
使用 `<cr>` 确认补全: >
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<CR>"
<
使用 <CR> 确认补全,并触发 coc.nvim 的 `formatOnType` 功能: >
inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm()
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
<
注意: `snippet` 和 `additionalTextEdit` 特性只有在确认补全后才会生效。
查看更多补全配置技巧: https://bit.ly/2VaVQ9A
==============================================================================
接口 *coc-interface*
------------------------------------------------------------------------------
coc 不会向 vim 添加自己的快捷键,你需要手工配置来满足需要。
------------------------------------------------------------------------------
快捷键 *coc-key-mappings*
注意: `i_` 打头的映射仅在插入模式下工作,`n_ `打头的映射仅在正常模式下工作。
<Plug>(coc-diagnostic-info) *n_coc-diagnostic-info*
显示当前位置下的错误信息,没有截断。
<Plug>(coc-diagnostic-next) *n_coc-diagnostic-next*
跳转到下一个错误处。
<Plug>(coc-diagnostic-prev) *n_coc-diagnostic-prev*
跳转到上一个错误处。
<Plug>(coc-diagnostic-next-error) *n_coc-diagnostic-next-error*
跳转到下一个错误处.
<Plug>(coc-diagnostic-prev-error) *n_coc-diagnostic-prev-error*
跳转到上一个错误处.
<Plug>(coc-definition) *n_coc-definition*
跳转到定义位置。
<Plug>(coc-declaration) *n_coc-declaration*
跳转到声明位置。
<Plug>(coc-implementation) *n_coc-implementation*
跳转到实现位置。
<Plug>(coc-type-definition) *n_coc-type-definition*
跳转到类型定义位置。
<Plug>(coc-references) *n_coc-references*
跳转到引用位置。
<Plug>(coc-format-selected) *n_coc-format-selected*
*v_coc-format-selected*
格式化选中区间,可在正常和可视模式下工作。
正常模式下时作用于 motion 对象。
例如: >
vmap <leader>p <Plug>(coc-format-selected)
nmap <leader>p <Plug>(coc-format-selected)
<
表示使用 `<leader>p` 格式化选中区间,使用 `<leader>pap` 格式化
当前段落。
<Plug>(coc-format) *n_coc-format*
格式化当前 buffer。
<Plug>(coc-rename) *n_coc-rename*
重命名光标所在位置符号。
<Plug>(coc-codeaction) *n_coc-codeaction*
获取并执行 language server 给出的当前缓冲区的
可用操作。
<Plug>(coc-codeaction-selected) *n_coc-codeaction-selected*
*v_coc-codeaction-selected*
获取并执行 language server 给出的当前选择区间
内的可用操作。
<Plug>(coc-openlink) *n_coc-openlink*
打开鼠标位置下的链接。
<Plug>(coc-codelens-action) *n_coc-codelens-action*
执行 codelens 给出的动作。
需要设置 `"codeLens.enable":true` 开启 codeLens
支持,该功能需要 neovim 支持 virtual text 特性。
<Plug>(coc-fix-current) *n_coc-fix-current*
修复当前行可修复的第一个错误修复操作。
<Plug>(coc-float-hide) *n_coc-float-hide*
隐藏所有浮动窗口。
<Plug>(coc-float-jump) *n_coc-float-jump*
跳转到第一个浮动窗口。
<Plug>(coc-refactor) *n_coc-refactor*
打开重构窗口,用于重构当前函数或重命名。
<Plug>(coc-range-select) *n_coc-range-select*
<Plug>(coc-range-select) *v_coc-range-select*
选择下一个可选区域。
注意:仅部分语言服务支持。
<Plug>(coc-range-select-backward) *v_coc-range-select-backward*
选择上一个可选区域。
注意:仅部分语言服务支持。
<Plug>(coc-funcobj-i) *n_coc-funcobj-i* *v_coc-funcobj-i*
选择函数内所有行,默认映射到 `if` 。
例如:使用 `cif` 重写当前函数。
<Plug>(coc-funcobj-a) *n_coc-funcobj-a* *v_coc-funcobj-a*
选择当前函数所在区间,默认映射到 `af`。
==============================================================================
变量 *coc-variables*
b:coc_enabled *b:coc_enabled*
为 `0` 时该缓存区将被 coc.nvim 忽略,仅在缓存区创建时设
置有效。
b:coc_root_patterns *b:coc_root_patterns*
当前 buffer 的 workspaceFolder 定位文件列表,用于覆盖
全局的 `"coc.preferences.rootPatterns"` 设置。 例如: >
autocmd FileType python let b:coc_root_patterns =
\ ['.git', '.env']
b:coc_suggest_disable *b:coc_suggest_disable*
用于针对特定 buffer 禁用补全,例如: >
" 对 python 文件禁用补全
autocmd FileType python let b:coc_suggest_disable = 1
b:coc_additional_keywords *b:coc_additional_keywords*
生成单词列表所用的额外 keyword 字符,例如: >
" Add keyword characters for css
autocmd FileType css let b:coc_additional_keywords = ["-"]
b:coc_suggest_blacklist *b:coc_suggest_blacklist*
禁用部分单词触发补全,例如: >
" Disable completion for 'end' in lua file
autocmd FileType lua let b:coc_suggest_blacklist = ["end"]
b:coc_diagnostic_info *b:coc_diagnostic_info*
当前缓冲区的错误信息,格式为:
`{'error': 0, 'warning': 0, 'information': 0, 'hint':0}`
用于自定义状态栏,查看 |coc-status|.
b:coc_current_function *b:coc_current_function*
当前光标所在函数名。
在配置文件中添加:
`"coc.preferences.currentFunctionSymbolAutoUpdate": true`
启用 CursorHold 时自动更新。
g:coc_last_hover_message *g:coc_last_hover_message*
最近一条由 `doHover` 返回的消息。
g:coc_start_at_startup *g:coc_start_at_startup*
在 vim 启动时启动 coc 服务。如果设置为 0需要手工
执行 |:CocStart| 命令启动服务。
默认: 1
g:coc_user_config *g:coc_user_config*
配置 coc 的用户配置,推荐使用 coc-settings.json 文件
进行配置,而不是该变量。
该设置仅在服务启动前有效。
g:coc_global_extensions *g:coc_global_extensions*
用户设置需要安装的插件coc 会检测其中未安装的插件在
vim 启动后使用异步方式进行安装。
该设置仅在服务启动前有效。
>
let g:coc_global_extensions = ['coc-json', 'coc-git']
<
g:coc_enable_locationlist *g:coc_enable_locationlist*
自动打开 CocList 提供地址列表,如果使用其它插件提供
地址列表,可设置该数值为 0
默认: 1
g:coc_snippet_next *g:coc_snippet_next*
跳转到下一个代码片段占位符的快捷键。
仅在代码片段生效时有效。
默认: <C-j>
g:coc_snippet_prev *g:coc_snippet_prev*
跳转到上一个代码片段占位符的快捷键。
仅在代码片段生效时有效。
默认: <C-k>
g:coc_filetype_map *g:coc_filetype_map*
文件类型映射字典,用于让 language server 支持更多
的文件类型,例如: >
let g:coc_filetype_map = {
\ 'html.swig': 'html',
\ 'wxss': 'css',
\ }
<
默认: {}
注意: 为了与 VSCode 一致coc 总是把 `javascript.jsx`
映射为 `javascriptreact` `typescript.tsx` 映射为
`typescriptreact`.
g:coc_selectmode_mapping *g:coc_selectmode_mapping*
是否启动选择模式映射。 >
snoremap <silent> <BS> <c-g>c
snoremap <silent> <DEL> <c-g>c
snoremap <silent> <c-h> <c-g>c
snoremap <c-r> <c-g>"_c<c-r>
<
默认: 1
g:coc_force_bundle *g:coc_force_bundle*
默认情况下 coc 优先使用 lib 文件夹下的 js 文件。设置为 `1`
强制使用 webpack 编译的 `build/index.js` 文件。
默认: 0
g:coc_node_path *g:coc_node_path*
启动 coc 服务的 node 路径,例如: >
let g:coc_node_path = '/usr/local/opt/node@10/bin/node'
<
该配置仅在手工编译代码时生效, 路径支持包含 `~` 以及 `$`
开头的环境变量
g:coc_node_args *g:coc_node_args*
服务启动时 node 命令额外参数。启动 debug 模式可配置: >
let g:coc_node_args = ['--nolazy', '--inspect-brk=6045']
<
默认: []
g:coc_process_pid *g:coc_process_pid*
coc 服务的进程 id。
g:coc_status_error_sign *g:coc_status_error_sign*
状态栏使用的错误提示字符,默认 `E`
g:coc_status_warning_sign *g:coc_status_warning_sign*
状态栏使用的警告提示字符,默认 `W`
g:coc_status *g:coc_status*
插件给出的提示信息,用于状态栏使用。
g:WorkspaceFolders *g:WorkspaceFolders*
当前的 workspaceFolders用于 session 使用。
需添加 `set sessionoptions+=globals` 让 session 支持
globals 变量。
g:coc_config_home *g:coc_config_home*
设置 `coc-settings.json` 目录。默认:
Windows 系统:
`~/AppData/Local/nvim`
其它:
`~/.config/nvim`
g:coc_data_home *g:coc_data_home*
设置 `coc` 相关文件目录,比如 extensions, mru
等,默认:
Windows 系统:
`~/AppData/Local/coc`
其它:
`~/.config/coc`
------------------------------------------------------------------------------
函数 *coc-functions*
coc 在 vim 启动后异步启动服务,多数函数并不能在 vim 启动后立刻使用,
如果你想在服务启动调用函数,需要使用自动命令,例如: >
autocmd User CocNvimInit call CocAction('runCommand',
\ 'tsserver.watchBuild')
<
*coc#start()*
coc#start([{option}])
触发补全,{option} 可以包含:
- `source` 指定补全源.
例如: >
inoremap <silent> <C-w> <C-R>=coc#start({'source': 'word'})<CR>
<
使用 `CocList sources` 获取可用补全源。
*coc#config()*
coc#config({section}, {value})
设置用户配置,该函数不会修改配置文件,该函数可用于动态修改配置。
例如: >
call coc#config('coc.preferences', {
\ 'timeout': 1000,
\})
call coc#config('languageserver', {
\ 'ccls': {
\ "command": "ccls",
\ "trace.server": "verbose",
\ "filetypes": ["c", "cpp", "objc", "objcpp"]
\ }
\})
<
注意: 该函数可以多处或者在服务未启动时调用。
注意: 该函数可以同时和配置文件工作,建议主要使用配置文件。
*coc#add_extension()*
coc#add_extension({name}, ...)
已废弃: 使用 `g:coc_global_extensions` 代替
设置需要安装的插件如果发现未安装插件coc 将打开终端缓冲窗口
执行安装命令。例如:
>
call coc#add_extension('coc-json', 'coc-tsserver', 'coc-rls')
<
注意: 该函数可以多处或者在服务未启动时调用。
*coc#add_command()*
coc#add_command({id}, {command}, [{title}])
添加自定义的 vim 命令到 `:CocList commands` 列表中,例如: >
call coc#add_command('mundoToggle', 'MundoToggle',
\ 'toggle mundo window')
<
*coc#refresh()*
coc#refresh()
开启或者刷新补全,返回 vim 表达式,用于绑定 'imap',例如: >
inoremap <silent><expr> <c-space> coc#refresh()
<
*coc#expandable()*
coc#expandable()
检查当前位置是否可以展开代码块。
需要安装 `coc-snippets` 插件。
*coc#jumpable()*
coc#jumpable()
检查当前位置是否可以跳转到下一个代码块位置。
*coc#expandableOrJumpable()*
coc#expandableOrJumpable()
检查当前位置是否可以展开代码块或者跳转到下一个代码块位置。
需要安装 `coc-snippets` 插件。
*coc#on_enter()*
coc#on_enter()
通知 coc.nvim 回车事件。
目前用于 formatOnType 特性。 >
inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm()
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
<
注意: 开启 formatOnType 需要设置` "coc.preferences.formatOnType": true`
*coc#status()*
coc#status()
获取状态字符串,包含了 `b:coc_diagnostic_info` 以及
`g:coc_status`.
详情查看 |coc-status|
*coc#_select_confirm()*
coc#_select_confirm()
执行确认补全操作,如果没有选中项,选中第一个再确认。
注意: 该函数正确工作需要 |CompleteChanged| 自动命令支持。
*health#coc#check()*
health#coc#check()
由 neovim 的 |:checkhealth| 触发,检测依赖以及服务状态。
*coc#util#job_command()*
coc#util#job_command()
获取服务启动执行的命令。
*coc#util#get_config_home()*
coc#util#get_config_home()
获取用户配置文件所在目录。
*coc#util#get_data_home()*
coc#util#get_data_home()
获取 `coc` 数据目录。
*coc#util#extension_root()*
coc#util#extension_root()
获取插件根目录。
*coc#util#rebuild()*
coc#util#rebuild()
对插件执行 `npm rebuild` 命令。
*CocRequest()*
CocRequest({id}, {method}, [{params}])
向指定 language server 发送请求。
{id} - language server 唯一 id
{method} - 方法名称
{params} - 可选参数
>
call CocRequest('tslint', 'textDocument/tslint/allFixes',
\ {'textDocument': {'uri': 'file:///tmp'}})
<
发生错误会导致 vim 错误。
*CocRequestAsync()*
CocRequestAsync({id}, {method}, [{params}, [{callback}]])
向指定 language server 发送异步请求。
{callback} 在请求完成后被调用,第一个参数总是 {error},
第二个参数为响应结果。
*CocNotify()*
CocNotify({id}, {params})
向指定 language server 发送通知。
>
call CocNotify('ccls', '$ccls/reload')
<
*CocLocations()*
CocLocations({id}, {method}, [{params}, {openCommand}])
从指定 language server 获取地址列表。例如:
>
call CocLocations('ccls', '$ccls/call', {'callee': v:true})
call CocLocations('ccls', '$ccls/call', {}, 'vsplit')
<
{openCommand}: 缓冲区打开方法,默认使用
`coc.preferences.jumpCommand` 打开。 设置为 `v:false` 时总是使用
locations 列表。
*CocLocationsAsync()*
CocLocationsAsync({id}, {method}, [{params}, {openCommand}])
同 |CocLocations()| 一样,只是使用 notification 异步进行。
*CocAction()*
CocAction({action}, [...{args}])
执行 CocAction。详见下方列表。
*CocActionAsync()*
CocActionAsync({action}, [...{args}, [{callback}]])
异步执行 CocAction。详见下方列表。
{callback} 第一个参数为 {error},第二个为 {response}
------------------------------------------------------------------------------
可用的 Actions 列表
"sourceStat" *coc-action-sourceStat*
获取已加载补全源列表。
"refreshSource" [{source}] *coc-action-refreshSource*
刷新指定补全源。
"toggleSource" {source} *coc-action-toggleSource*
启用/禁用 {source}.
"diagnosticList" *coc-action-diagnosticList*
获取诊断列表。
"diagnosticInfo" *coc-action-diagnosticInfo*
显示当前位置诊断详情,没有截断。
"diagnosticPreview" *coc-action-diagnosticPreview*
在 preview 窗口显示当前位置诊断信息
"jumpDefinition" [{openCommand}] *coc-action-jumpDefinition*
跳转到定义处。
如有多个定义,使用 |coc-list| 展示。
{openCommand}: 可选打开命令,默认为 `coc.preferences.jumpCommand`
设置为 `v:false` 时总是使用 locations 列表。
"jumpDeclaration" [{openCommand}] *coc-action-jumpDeclaration*
跳转到声明处。
行为与 "jumpDefinition" 相同。
"jumpImplementation" [{openCommand}] *coc-action-jumpImplementation*
跳转到实现处。
行为与 "jumpDefinition" 相同。
"jumpTypeDefinition" [{openCommand}] *coc-action-jumpTypeDefinition*
跳转到类型定义处。
行为与 "jumpDefinition" 相同。
"jumpReferences" [{openCommand}] *coc-action-jumpReferences*
跳转到引用处。
行为与 "jumpDefinition" 相同。
"doHover" [{hoverTarget}] *coc-action-doHover*
显示当前位置的悬浮信息。
使用 `coc.preferences.hoverTarget` 改变信息显示方式,默认为预览窗口。
后续将支持浮动窗口。
"showSignatureHelp" *coc-action-showSignatureHelp*
显示当前函数的函数签名,推荐设置: >
autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
<
在代码片段跳转后显示函数签名。
"getCurrentFunctionSymbol" *coc-action-getCurrentFunctionSymbol*
获取当前光标所在的函数名称。
"documentSymbols" *coc-action-documentSymbols*
获取当前文档的符号列表。
"rename" *coc-action-rename*
重命名当前光标所在字符。
"selectionRanges" *coc-action-selectionRanges*
获取当前位置的可选区域列表。
"services" *coc-action-services*
获取所有服务列表。
"toggleService" {serviceId} *coc-action-toggleService*
开启或停止指定服务。
"format" *coc-action-format*
格式化当前缓冲区,需要 language server 支持格式化功能。
"formatSelected" [{mode}] *coc-action-formatSelected*
格式化选中区间,{mode} 可以为 `v` , `V`, `char`, `line` 之一。
如果不提供 {mode}, 该函数必须设置为 |formatexpr| 使用。
"codeAction" [{mode}] [{only}] *coc-action-codeAction*
执行 codeAction。
{mode} 为 visualmode() 返回结果。
{only} 可以是某个 codeAction 的 title或者是 CodeActionKind 列表
"codeLensAction" *coc-action-codeLensAction*
执行 codeLens 给出的 codeAction。
存在多个时弹出选择提示。
"commands" *coc-action-commands*
获取当前缓冲区可用命令列表。
"runCommand" [{name}] [...{args}] *coc-action-runCommand*
执行 {name} 命令,如果不提供 {name},则提示进行选择。
{args} 做为参数传递给对应命令。
对于常用命令,可以设置更方便使用的命令,例如: >
command! -nargs=0 OR
\ :call CocActionAsync('runCommand', 'tsserver.organizeImports')
"fold" {{kind}} *coc-action-fold*
折叠当前缓冲区,该方法需要 language server 支持。
{kind} 可以为'comment', 'imports' and 'region' 之一。
"highlight" *coc-action-highlight*
高亮鼠标所在的字符。
推荐配置 CursorHold 进行高亮: >
autocmd CursorHold * silent call CocActionAsync('highlight')
<
注意: 请确保 'updatetime' 选项不要设置的太高。
"openLink" [{command}] *coc-action-openlink*
打开光标所在位置的链接。{command} 默认为
`"coc.preferences.jumpCommand"`
支持文件和 url 链接。
"extensionStats" *coc-action-extensionStats*
获取所有插件的状态列表,包含 `id` `root` 和 `state`
`state` 可以为 `disabled`, `activated` 和 `loaded`。
"toggleExtension" {id} *coc-action-toggleExtension*
启用/禁用指定插件。
"uninstallExtension" {id} *coc-action-uninstallExtension*
卸载指定插件。
"reloadExtension" {id} *coc-action-reloadExtension*
重加载指定插件。
"deactivateExtension" {id} *coc-action-deactivateExtension*
停用指定插件。
"pickColor" *coc-action-pickColor*
改变光标所在的颜色。
需要 language server 支持 document color 功能。
推荐安装 coc-highlight 插件在所有文件中支持该功能。
注意: 仅在 Mac 系统或者 vim 支持 python 且已安装 gtk 模块时可用。
"colorPresentation" *coc-action-colorPresentation*
改变当前位置颜色显示方式。
需要 language server 支持 color representation 请求。
推荐安装 coc-highlight 插件在所有文件中支持该功能。
"codeActions" [{visualmode}] *coc-action-codeActions*
获取当前行的所有 codeActions指定 {visualmode}
获取上一次选择区间的中的 codeActions.
"quickfixes" [{visualmode}] *coc-action-quickfixes*
获取当前行的 quickfix codeActions指定 {visualmode}
获取上一次选择区间的中的 quickfixes.
"doCodeAction" {codeAction} *coc-action-doCodeAction*
执行指定 codeAction。
"doQuickfix" *coc-action-doQuickfix*
执行当前行第一个 quickfix action用于快速修复。
"addRanges" {ranges} *coc-action-addRanges*
Ranges 必须为 LSP 定义的 Range 数组: https://git.io/fjiEG
==============================================================================
命令 *coc-commands*
:CocStart *:CocStart*
启动 coc 服务,如果已启动则什么都不做。
:CocDisable *:CocDisable*
停用所有 coc 功能。
:CocEnable *:CocEnable*
启用所有 coc 功能。
:CocRestart *:CocRestart*
重启 coc 服务。
遇到问题,推荐使用该命名而不是重启 vim。
:CocConfig *:CocConfig*
打开用户的 `coc-settings.json` 文件。
:CocInstall [{option}] {name} ... *:CocInstall*
安装一个或多个 coc 插件。
{option}: 可以使用 `-sync` 用同步方式而不是 terminal
安装插件。
访问 https://www.npmjs.com/search?q=keywords%3Acoc.nvim
获取所有 coc 插件。
:CocUninstall {name} *:CocUninstall*
卸载指定 coc 插件,支持使用 <tab> 进行补全。
:CocUpdate *:CocUpdate*
升级所有 coc 插件。
升级前请尽可能确保 coc 为最新版本,否则升级可能失败,
因为插件可能使用了新版 API 导致不兼容。
:CocUpdateSync *:CocUpdateSync*
同步方式升级所有插件。
:CocRebuild *:CocRebuild*
针对插件执行 `npm rebuild` 命令。
升级 nodejs 后可能会需要。
:CocCommand {name} [{args}] ... *:CocCommand*
执行某个插件提供的命令,支持使用 <tab> 对 {name} 补全。
:{range}CocAction [{only}] *:CocAction*
获取当前 buffer 所有的 codeActions 到 actions 列表,
支持 {range}。
{only} 可以为 'quickfix' 或者 'source'。
:{range}CocFix *:CocFix*
同 `:CocAction quickfix` 一样。
:CocOpenLog *:CocOpenLog*
打开 coc 的日志文件,默认级别为 info。
设置 `NVIM_COC_LOG_LEVEL` 改变日志级别,例如: >
export NVIM_COC_LOG_LEVEL=debug
<
或者添加: >
let $NVIM_COC_LOG_LEVEL='debug'
<
到 .vimrc 。
:CocInfo *:CocInfo*
获取当前系统版本以及日志等信息bug 报告需提供该命令给出内容。
==============================================================================
自动命令 *coc-autocmds*
*CocLocationsChange*
:autocmd User CocLocationsChange {command}
当地址列表变化时触发。
如果你不想用默认 |CocList| 或者想修改默认的选项来展示地址列表,
可用于自动命令配合其它插件来显示地址列表。
需同时将 |g:coc_enable_locationlist| 设置为 0例如
>
let g:coc_enable_locationlist = 0
autocmd User CocLocationsChange CocList --normal -A location
<
*CocNvimInit*
:autocmd User CocNvimInit {command}
服务启动后触发。可用于服务启动后自动执行命令。
*CocStatusChange*
:autocmd User CocStatusChange {command}
`g:coc_status` 改变时触发,可用于刷新状态栏。
*CocDiagnosticChange*
:autocmd User CocDiagnosticChange {command}
错误信息变化时触发,可用于强制更新状态栏。
*CocJumpPlaceholder*
:autocmd User CocJumpPlaceholder {command}
跳转占位符时触发。可用于跳转后自动显示函数签名。例如: >
autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
<
*CocOpenFloat*
:autocmd User CocOpenFloat {command}
浮窗打开时触发。
*CocTerminalOpen*
:autocmd User CocTerminalOpen {command}
内置终端打开时触发。可用于调整窗口大小。
==============================================================================
高亮 *coc-highlights*
使用 |:hi| 命令可以改变 coc 提供的高亮。例如: >
" 让错误文本显示为红色
highlight CocErrorHighlight ctermfg=Red guifg=#ff0000
<
注意: highlight 命令必须在 |:colorscheme| 命令之后使用。
注意: 不要使用 `:hi default`
CocErrorSign *CocErrorSign*
默认: `hi CocErrorSign ctermfg=Red guifg=#ff0000`
错误标记符使用的高亮。
CocWarningSign *CocWarningSign*
默认: `hi CocWarningSign ctermfg=Brown guifg=#ff922b`
警告标记符使用的高亮。
CocInfoSign *CocInfoSign*
默认: `hi CocInfoSign ctermfg=Yellow guifg=#fab005`
信息标记符使用的高亮。
CocHintSign *CocHintSign*
默认: `hi CocHintSign ctermfg=Blue guifg=#15aabf`
提醒标记符使用的高亮。
CocErrorVirtualText *CocErrorVirtualText*
默认: `hi default link CocErrorVirtualText CocErrorSign`
错误标记符使用的高亮。
CocWarningVirtualText *CocWarningVirtualText*
默认: `hi default link CocWarningVirtualText CocWarningSign`
警告标记符使用的高亮。
CocInfoVirtualText *CocInfoVirtualText*
默认: `hi default link CocInfoVirtualText CocInfoSign`
信息标记符使用的高亮。
CocHintVirtualText *CocHintVirtualText*
默认: `hi default link CocHintVirtualText CocHintSign`
提醒标记符使用的高亮。
CocErrorHighlight *CocErrorHighlight*
默认: `hi default link CocErrorHighlight CocUnderline`
错误文本使用的高亮。
CocWarningHighlight *CocWarningHighlight*
默认: `hi default link CocWarningHighlight CocUnderline`
警告文本使用的高亮。
CocInfoHighlight *CocInfoHighlight*
默认: `hi default link CocInfoHighlight CocUnderline`
信息文本使用的高亮。
CocHintHighlight *CocHintHighlight*
默认: `hi default link CocHintHighlight CocUnderline`
提醒文本使用的高亮。
CocHighlightText *CocHighlightText*
默认: `hi default link CursorColumn`
Document highlight 特性使用的高亮。用于高亮显示全部当前缓冲区的相同
变量。
CocHighlightTextRead *CocHighlightTextRead*
默认: `hi default link CocHighlightRead CocHighlightText`
用于显示 `Read` 类型的变量。
CocHighlightTextWrite *CocHighlightTextWrite*
默认: `hi 默认 link CocHighlightWrite CocHighlightText`
用于显示 `Write` 类型的变量。
CocErrorLine *CocErrorLine*
默认: `undefined`
错误行的高亮。
CocWarningLine *CocWarningLine*
默认: `undefined`
警告行的高亮。
CocInfoLine *CocInfoLine*
默认: `undefined`
信息行的高亮。
CocHintLine *CocHintLine*
默认: `undefined`
提示行的高亮。
CocCodeLens *CocCodeLens*
默认:``ctermfg=Gray guifg=#999999`
显示 codeLens 信息使用虚拟文本高亮。
CocFloating *CocFloating*
默认: `Pmenu`
悬浮窗口背景高亮。
CocErrorFloat *CocErrorFloat*
默认: `hi default link CocErrorFloat CocErrorSign`
错误浮窗符使用的高亮。
CocWarningFloat *CocWarningFloat*
默认: `hi default link CocWarningFloat CocWarningSign`
警告浮窗符使用的高亮。
CocInfoFloat *CocInfoFloat*
默认: `hi default link CocInfoFloat CocInfoSign`
信息浮窗符使用的高亮。
CocHintFloat *CocHintFloat*
默认: `hi default link CocHintFloat CocHintSign`
提醒浮窗符使用的高亮。
CocCursorRange *CocCursorRange*
Default: `hi default link CocCursorRange Search`
鼠标选择区使用的高亮。
CocHoverRange *CocHoverRange*
默认: `hi default link CocHoverRange Search`
当前 hover 范围使用的高亮。
==============================================================================
LIST SUPPORT *coc-list*
自带列表功能可以更轻易与 coc 提供的不同列表进行交互。
Coc 列表支持以下特性:
* 插入和正常模式。
* 提供默认快捷键。
* 自定义不同模式下的快捷键。
* 提供重开之前列表以及操作前/后一个项目的命令。
* 可设置使用不同的过滤匹配模式。
* 实时交互模式。
* 自动预览功能。
* 数字键选择功能。
* 支持多种操作。
* 解析 ansi 高亮。
* 鼠标支持。
* 使用 <tab> 选择操作。
* 正常模式下使用 <space> 进行多选操作。
------------------------------------------------------------------------------
LIST COMMAND *coc-list-command*
:CocList [{...options}] [{source}] [{...args}] *:CocList*
打开名称为 {source} 的列表, 例如: >
:CocList --normal location
<
打开当前的跳转列表。
查看 |coc-command-options| 获取可用的 {options}。
{args} 为传递给对应源的参数。
{source} 为空时,打开列表源的列表。
:CocListResume *:CocListResume*
重新打开上一次的列表,输入字符和鼠标位置等信息将自动
复原。
:CocPrev *:CocPrev*
对之前列表的上一个选项执行默认操作。
该操作不会打开之前列表。
:CocNext *:CocNext*
对之前列表的下一个选项执行默认操作。
该操作不会打开之前列表。
Command options *coc-list-options*
--top
在上方显示列表分割窗口,默认为下方显示。
--tab
使用新标签页打开列表。
--normal
打开后进入正常模式,默认为输入模式。
--no-sort
关闭 coc 提供排序,使用源本身给出的排序。
--input={input}
设置列表的初始输入。
--strict
-S
使用精确匹配,而不是默认的模糊匹配。
--regex
-R
使用正则匹配,而不是默认的模糊匹配。
--ignore-case
匹配时忽略大小写,仅在使用精确或正则匹配时有效。
--number-select
-N
开启数字选择模式,可在正常模式下使用 1-9 选择对应行的项目。
使用 0 选择第 10 行。
--interactive
-I
使用实时模式,开启后输入变化时所有选项不由 coc 本身进行过滤
排序,而是每次都从后端重新请求结果。
注意:该模式需要列表源支持才可开启,大部分源并不支持该模式。
注意: 开启后过滤和排序完全由列表源进行。
--auto-preview
-A
开启自动预览模式,开启后预览窗口将自动打开。
------------------------------------------------------------------------------
LIST CONFIGURATION *coc-list-configuration*
CocList 同样使用 `coc-settings.json` 文件来进行配置。
安装 coc-json 插件后可以在 coc-settings.json 文件中输入 `list.` 来获取所有
list 相关可用配置项。
针对特性的 list 源,可使用以 `list.source.{name}` 开头的配置项来设置。
修改指定源的默认选项:~
使用 `list.source.{name}.defaultOptions` 配置,例如: >
// 让 symbols 列表启用 interactive 模式,同时支持数字键选中
"list.source.symbols.defaultOptions": ["--interactive", "--number-select"],
<
注意: 部分源只能在 interactive 模式下工作,所以推荐使用配置让
interactive 总是生效。
注意: 如果通过命令行传递了参数,默认选项将不会生效。
设置指定源默认参数:~
使用 `list.source.{name}.defaultArgs` 配置,例如: >
// 配置 grep 源默认使用正则匹配
"list.source.grep.defaultArgs": ["-regex"],
注意: 默认参数仅在命令行调用参数为空时生效。
在正常模式键入 `` 可以查看当前源的详细文档。
------------------------------------------------------------------------------
LIST MAPPINGS *coc-list-mappings*
插入模式下的默认快捷键:
<Esc> - 退出当前列表。
<C-c> - 结束后台任务。
<C-v> - 从系统粘贴板插入文本。
<C-l> - 重载当前列表。
<C-o> - 切换到正常模式。
<Down> - 选择下一项。
<Up> - 选择上一项。
<Left> - 鼠标左移一格。
<Right> - 鼠标右移一格。
<End> - 移动鼠标到末尾。
<C-e> - 移动鼠标到末尾。
<Home> - 移动鼠标到起始位置。
<C-a> - 移动鼠标到起始位置。
<C-f> - 向前滚动窗口。
<C-b> - 向后滚动窗口。
<Backspace> - 移除上一个字符。
<C-h> - 移除上一个字符。
<C-w> - 移除上一个单词。
<C-u> - 移除光标之前全部输入。
<C-n> - 切换到下一个历史匹配输入。
<C-p> - 切换到上一个历史匹配输入。
<C-s> - 切换过滤匹配模式。
<C-r> - 从 vim 寄存器插入内容。
<Tab> - 选择操作项。
正常模式下默认快捷键:
<Esc> - 退出当前列表。
<C-c> - 停止后台任务。
<C-l> - 重载当前列表。
<C-a> - 将所有展示项目设置为选中状态。
<Tab> - 选择操作项。
<Space> - 切换当前项选中状态。
i,I,o,O,a,A - 切换到插入模式。
p - 执行“预览”操作。
: - 结束列表但不关闭窗口。
? - 显示帮助文档,暂时仅支持 neovim。
t - 执行 'tabe' 操作.
d - 执行 'drop' 操作.
s - 执行 'split' 操作.
使用 |coc-list-mappings-custom| 可覆盖默认提供的映射。
*coc-list-mappings-custom*
使用配置项 `"list.normalMappings"` 和 `"list.insertMappings"` 来添加
自定义配置。例如: >
"list.insertMappings": {
"<C-r>": "do:refresh",
"<C-f>": "feedkeys:\\<C-f>",
"<C-b>": "feedkeys:\\<C-b>",
"<C-n>": "normal:j",
"<C-p>": "normal:k",
"<C-t>": "action:tabe",
"<C-x>": "call:MyFunc"
"<C-v>": "eval:@@"
}
"list.normalMappings": {
"c": "expr:MyExprFunc"
"d": "action:delete"
}
<
注意: 针对插入模式的映射,应该只使用 `<C-` 或 `<A-` 开头的快捷键。
注意:<Esc> 无法被重新映射,因为那样可能导致无法关闭窗口。
映射表达式格式为 `command:arguments`,可用命令如下:
'do' - coc 相关特定操作:
'refresh' - 刷新列表
'exit' - 退出列表
'selectall' - 将所有展示项目设置为选中状态
'switch' - 切换过滤匹配模式
'stop' - 停止加载任务
'cancel' - 取消列表同时保留窗口
'toggle' - 切换当前项选中状态
'toggleMode' - 在插入和正常模式之间切换
'previous' - 移动到前一个项目
'next' - 移动到后一个项目
'defaultaction' - 执行默认操作
'help' - 显示帮助
'prompt' - 提示栏相关操作:
'previous' - 切换到匹配历史记录的上一个
'next' - 切换到匹配历史记录的下一个
'start' - 移动光标到开头
'end' - 移动光标到结尾
'left' - 左移光标
'right' - 右移光标
'deleteforward' - 删除前一个字符
'deletebackward' - 删除后一个字符
'removetail' - 删除后面全部字符
'removeahead' - 删除前面全部字符
'insertregister' - 从 vim 寄存器插入内容
'paste' - 插入系统粘贴板内容到当前位置
'eval' - 执行 viml 表达式并将结果插入到当前位置
'action' - 执行特定操作,使用 <tab> 查看当前列表支持操作
'feedkeys' - 发送按键到列表窗口
'normal' - 执行 normal 命令
'normal!' - 执行 normal 命令
'command' - 执行 vim 命令
'call' - 调用 vim 函数,发送 |coc-list-context| 做为唯一参数
'expr' - 与 'call' 相同,但是函数必须返回的待执行的操作名称
*coc-list-context*
Context 参数包含以下属性:
'name' - 列表名称,例如: `'location'`
'args' - 传递给列表源使用的参数
'input' - 当前输入
'winid' - 列表的 window id
'bufnr' - 列表启动时的缓冲区的 bufnr
'targets' - 当前选中项目列表, 详见: |coc-list-target|
*coc-list-target*
Target 包含以下属性:
'label' - 缓冲区显示的文本,必填属性
'filtertext' - 可选的过滤用文本
'location' - 可选的位置信息,详情查看: https://bit.ly/2Rtb6Bo
'data' - 可选的额外信息
==============================================================================
LIST SOURCES *coc-list-sources*
location *coc-list-location*
最近跳转列表。
可用操作:
- 'open': 使用 `"coc.preferences.jumpCommand"` 配置打开, 默认操作
- 'preview' : 打开/关闭预览窗口
- 'tabe': 使用 |:tabe| 命令打开
- 'drop': 使用 |:drop| 命令打开
- 'vsplit': 使用 |:vsplit| 命令打开
- 'split': 使用 |:split| 命令打开
- 'quickfix': 将选中项添加到 vim 的 quickfix.
extensions *coc-list-extensions*
插件列表。
可用操作:
- 'toggle' 激活/停用插件, 默认操作
- 'disable' 禁用插件
- 'enable' 启动插件
- 'lock' 锁定/解除插件在当前版本
- 'doc' 查看插件文档
- 'reload' 重载插件
- 'uninstall' 卸载插件
diagnostics *coc-list-diagnostics*
错误信息列表。
可用操作查看 |coc-list-location|
outline *coc-list-outline*
当前缓冲区大纲,没有对应 language server 提供 symbols 功能时使用
ctags 命令生成。
可用操作查看 |coc-list-location|
symbols *coc-list-symbols*
项目内搜索符号,必须配合 `--interactive` 参数使用。
可用操作查看 |coc-list-location|
services *coc-list-services*
已注册服务列表。
可用操作:
- 'toggle': 开启/关闭服务,默认操作。
commands *coc-list-commands*
已注册命令列表。
可用操作:
- 'run': 执行命令,默认操作。
links *coc-list-links*
当前文档链接列表。
可用操作:
- 'open': 打开链接, 默认操作。
- 'jump': 跳转到定义处。
sources *coc-list-completion-sources*
可用补全源列表。
可用操作:
- 'toggle': 激活/停用选中源, 默认操作。
- 'refresh': 刷新选中源。
lists *coc-list-lists*
已注册的列表源列表。
可用操作:
- 'open': 打开选中列表源,默认操作。
==============================================================================
状态栏支持 *coc-status*
状态栏包含两个部分:
- 错误信息提示
- 插件提供的状态
最简单的使用方式是将 `%{coc#status()}` 添加到 vim 的 'statusline' 选项。
------------------------------------------------------------------------------
*coc-status-manual*
手工创建函数:
>
function! StatusDiagnostic() abort
let info = get(b:, 'coc_diagnostic_info', {})
if empty(info) | return '' | endif
let msgs = []
if get(info, 'error', 0)
call add(msgs, 'E' . info['error'])
endif
if get(info, 'warning', 0)
call add(msgs, 'W' . info['warning'])
endif
return join(msgs, ' ') . ' ' . get(g:, 'coc_status', '')
endfunction
<
添加 `%{StatusDiagnostic()}` 到 'statusline' 选项。
------------------------------------------------------------------------------
*coc-status-airline*
vim-airline: https://github.com/vim-airline/vim-airline 支持:
vim-airline 提供开箱即用的支持。
关闭 vim-airline 集成:
>
let g:airline#extensions#coc#enabled = 0
<
改变错误标签:
>
let airline#extensions#coc#error_symbol = 'Error:'
<
改变警告标签:
>
let airline#extensions#coc#warning_symbol = 'Warning:'
<
改变错误格式:
>
let airline#extensions#coc#stl_format_err = '%E{[%e(#%fe)]}'
<
改变警告格式:
>
let airline#extensions#coc#stl_format_warn = '%W{[%w(#%fw)]}'
------------------------------------------------------------------------------
*coc-status-lightline*
Lightline.vim: https://github.com/itchyny/lightline.vim 支持:
>
let g:lightline = {
\ 'colorscheme': 'wombat',
\ 'active': {
\ 'left': [ [ 'mode', 'paste' ],
\ [ 'cocstatus', 'readonly', 'filename', 'modified' ] ]
\ },
\ 'component_function': {
\ 'cocstatus': 'coc#status'
\ },
\ }
autocmd User CocStatusChange,CocDiagnosticChange call lightline#update()
<
==============================================================================
常见问题 *coc-faq*
------------------------------------------------------------------------------
Q: 如何显示当前补全项的文档?
A vim 自带的 preview 窗口默认是关闭的,可以设置
`"suggest.enablePreview":true` 来开启。
如果服务端只在补全项变化时返回文档,该方法将无法显示文档,你需要浮动
窗口支持来显示文档参考文档https://bit.ly/2NCVh5P
------------------------------------------------------------------------------
Q: 鼠标悬停很久才显示错误信息。
A 你需要配置 `set updatetime=100` 来减少 CursorHold 的触发时间。
------------------------------------------------------------------------------
Q: 我想用 ale 插件显示错误提示。
A: 在配置文件中添加:
>
"diagnostic.displayByAle": true,
<
------------------------------------------------------------------------------
Q: 我想使用 codeLens 特性。
A: CodeLens 特性需要支持虚拟文本特性的 neovim 版本,默认状态是关闭的。
如需启用,需在配置文件中添加:
>
"codeLens.enable": true,
<
------------------------------------------------------------------------------
Q: 我需要高亮 markdown 中的代码。
A: 可以使用支持代码高亮的 markdown 插件,例如:
https://github.com/tpope/vim-markdown, 在 vimrc 中添加如下配置:
>
let g:markdown_fenced_languages = ['css', 'js=javascript']
==============================================================================
变更历史 *coc-changelog*
查看 ../history.md
==============================================================================
vim:tw=78:nosta:noet:ts=8:sts=0:ft=help:noet:fen:fdm=marker: