1769 lines
45 KiB
Text
1769 lines
45 KiB
Text
*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:
|