*coc-nvim.txt* 基于 LSP 的 vim 智能引擎 版本号: 0.0.57 作者: Qiming Zhao 开源协议: 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": "⭐︎" ------------------------------------------------------------------------------ 定制补全体验 使用 触发补全: > function! s:check_back_space() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~ '\s' endfunction inoremap \ pumvisible() ? "\" : \ check_back_space() ? "\" : \ coc#refresh() 使用 强制触发补全: > inoremap coc#refresh() < 使用 `` 确认补全: > inoremap pumvisible() ? "\" : "\" < 使用 确认补全,并触发 coc.nvim 的 `formatOnType` 功能: > inoremap pumvisible() ? coc#_select_confirm() \: "\u\\=coc#on_enter()\" < 注意: `snippet` 和 `additionalTextEdit` 特性只有在确认补全后才会生效。 查看更多补全配置技巧: https://bit.ly/2VaVQ9A ============================================================================== 接口 *coc-interface* ------------------------------------------------------------------------------ coc 不会向 vim 添加自己的快捷键,你需要手工配置来满足需要。 ------------------------------------------------------------------------------ 快捷键 *coc-key-mappings* 注意: `i_` 打头的映射仅在插入模式下工作,`n_ `打头的映射仅在正常模式下工作。 (coc-diagnostic-info) *n_coc-diagnostic-info* 显示当前位置下的错误信息,没有截断。 (coc-diagnostic-next) *n_coc-diagnostic-next* 跳转到下一个错误处。 (coc-diagnostic-prev) *n_coc-diagnostic-prev* 跳转到上一个错误处。 (coc-diagnostic-next-error) *n_coc-diagnostic-next-error* 跳转到下一个错误处. (coc-diagnostic-prev-error) *n_coc-diagnostic-prev-error* 跳转到上一个错误处. (coc-definition) *n_coc-definition* 跳转到定义位置。 (coc-declaration) *n_coc-declaration* 跳转到声明位置。 (coc-implementation) *n_coc-implementation* 跳转到实现位置。 (coc-type-definition) *n_coc-type-definition* 跳转到类型定义位置。 (coc-references) *n_coc-references* 跳转到引用位置。 (coc-format-selected) *n_coc-format-selected* *v_coc-format-selected* 格式化选中区间,可在正常和可视模式下工作。 正常模式下时作用于 motion 对象。 例如: > vmap p (coc-format-selected) nmap p (coc-format-selected) < 表示使用 `p` 格式化选中区间,使用 `pap` 格式化 当前段落。 (coc-format) *n_coc-format* 格式化当前 buffer。 (coc-rename) *n_coc-rename* 重命名光标所在位置符号。 (coc-codeaction) *n_coc-codeaction* 获取并执行 language server 给出的当前缓冲区的 可用操作。 (coc-codeaction-selected) *n_coc-codeaction-selected* *v_coc-codeaction-selected* 获取并执行 language server 给出的当前选择区间 内的可用操作。 (coc-openlink) *n_coc-openlink* 打开鼠标位置下的链接。 (coc-codelens-action) *n_coc-codelens-action* 执行 codelens 给出的动作。 需要设置 `"codeLens.enable":true` 开启 codeLens 支持,该功能需要 neovim 支持 virtual text 特性。 (coc-fix-current) *n_coc-fix-current* 修复当前行可修复的第一个错误修复操作。 (coc-float-hide) *n_coc-float-hide* 隐藏所有浮动窗口。 (coc-float-jump) *n_coc-float-jump* 跳转到第一个浮动窗口。 (coc-refactor) *n_coc-refactor* 打开重构窗口,用于重构当前函数或重命名。 (coc-range-select) *n_coc-range-select* (coc-range-select) *v_coc-range-select* 选择下一个可选区域。 注意:仅部分语言服务支持。 (coc-range-select-backward) *v_coc-range-select-backward* 选择上一个可选区域。 注意:仅部分语言服务支持。 (coc-funcobj-i) *n_coc-funcobj-i* *v_coc-funcobj-i* 选择函数内所有行,默认映射到 `if` 。 例如:使用 `cif` 重写当前函数。 (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* 跳转到下一个代码片段占位符的快捷键。 仅在代码片段生效时有效。 默认: g:coc_snippet_prev *g:coc_snippet_prev* 跳转到上一个代码片段占位符的快捷键。 仅在代码片段生效时有效。 默认: 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 c snoremap c snoremap c snoremap "_c < 默认: 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 =coc#start({'source': 'word'}) < 使用 `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 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 pumvisible() ? coc#_select_confirm() \: "\u\\=coc#on_enter()\" < 注意: 开启 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 插件,支持使用 进行补全。 :CocUpdate *:CocUpdate* 升级所有 coc 插件。 升级前请尽可能确保 coc 为最新版本,否则升级可能失败, 因为插件可能使用了新版 API 导致不兼容。 :CocUpdateSync *:CocUpdateSync* 同步方式升级所有插件。 :CocRebuild *:CocRebuild* 针对插件执行 `npm rebuild` 命令。 升级 nodejs 后可能会需要。 :CocCommand {name} [{args}] ... *:CocCommand* 执行某个插件提供的命令,支持使用 对 {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 高亮。 * 鼠标支持。 * 使用 选择操作。 * 正常模式下使用 进行多选操作。 ------------------------------------------------------------------------------ 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* 插入模式下的默认快捷键: - 退出当前列表。 - 结束后台任务。 - 从系统粘贴板插入文本。 - 重载当前列表。 - 切换到正常模式。 - 选择下一项。 - 选择上一项。 - 鼠标左移一格。 - 鼠标右移一格。 - 移动鼠标到末尾。 - 移动鼠标到末尾。 - 移动鼠标到起始位置。 - 移动鼠标到起始位置。 - 向前滚动窗口。 - 向后滚动窗口。 - 移除上一个字符。 - 移除上一个字符。 - 移除上一个单词。 - 移除光标之前全部输入。 - 切换到下一个历史匹配输入。 - 切换到上一个历史匹配输入。 - 切换过滤匹配模式。 - 从 vim 寄存器插入内容。 - 选择操作项。 正常模式下默认快捷键: - 退出当前列表。 - 停止后台任务。 - 重载当前列表。 - 将所有展示项目设置为选中状态。 - 选择操作项。 - 切换当前项选中状态。 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": { "": "do:refresh", "": "feedkeys:\\", "": "feedkeys:\\", "": "normal:j", "": "normal:k", "": "action:tabe", "": "call:MyFunc" "": "eval:@@" } "list.normalMappings": { "c": "expr:MyExprFunc" "d": "action:delete" } < 注意: 针对插入模式的映射,应该只使用 ` 无法被重新映射,因为那样可能导致无法关闭窗口。 映射表达式格式为 `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' - 执行特定操作,使用 查看当前列表支持操作 '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: