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

1769 lines
45 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

*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: