*coc-nvim.txt*				 基于 LSP 的 vim 智能引擎

版本号: 0.0.57
作者: Qiming Zhao <chemzqm at gmail.com>
开源协议: MIT license

内容 						*coc-contents*

介绍					|coc-introduction|
依赖					|coc-requirement|
安装					|coc-install|
设置 					|coc-configuration|
补全   					|coc-completion|
语言服务 				|coc-languageserver|
接口					|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-output|
    补全源列表 				   |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 版本以上或者 vim 8.0 版本以上

首先需要安装 node https://nodejs.org/en/download/ 用于执行 javascript 代码。

==============================================================================

安装						*coc-install*

推荐使用 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": "⭐︎"

------------------------------------------------------------------------------

定制补全体验

使用 <c-space> 强制触发补全: >

	inoremap <silent><expr> <c-space> coc#refresh()
<
使用 `<cr>` 确认补全： >

	inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<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-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 characers 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_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_extension_root 				*g:coc_extension_root*

			自定义插件安装根目录，为空时使用默认地址。

			Windows 系统:
				`~/AppData/Local/coc/extensions`
			其它:
				`~/.config/coc/extensions`


g:coc_global_extensions 			*g:coc_global_extensions*

			用户设置需要安装的插件，coc 会检测其中未安装的插件在
			vim 启动后使用异步方式进行安装，推荐使用
			|coc#add_extension()| 函数进行配置。
			
			该设置仅在服务启动前有效。

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_debug  				*g:coc_force_debug*


			强制使用编译后的代码 javascript 代码，默认情况下如果存在
			已编译版本， coc 将优先使用已编译版本。

			默认: 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 变量。

------------------------------------------------------------------------------

函数 						*coc-functions*

coc 在 vim 启动后异步启动服务，多数函数并不能在 vim 启动后立刻使用，
如果你想在服务启动调用函数，需要使用自动命令，例如： >

	autocmd User CocNvimInit call CocAction('runCommand',
						\ 'tsserver.watchBuild')
<
						*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}, ...)


	设置需要安装的插件，如果发现未安装插件，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#install()*
coc#util#install([{config}])

	安装打包后的 coc.nvim javascript 部分代码。

	{config} 可包含:

	- `terminal` 使用 terminal 来异步安装
	- `tag` 安装最新的已发布版本

						*coc#util#extension_root()*
coc#util#extension_root()
	
	获取插件根目录。

						*coc#util#rebuild()*
coc#util#rebuild()

	对插件执行 `npm rebuild` 命令。

						*coc#util#has_float()*

coc#util#has_float()

	检测是否存在浮动窗口。

						*coc#util#float_scrollable()*

coc#util#float_scrollable()

	检测是否存在可滚动的浮动窗口。

						*coc#util#float_scroll()*
coc#util#float_scroll({forward})

	用于创建滚动浮动窗口的映射，例如： >

	nnoremap <expr><C-f> coc#util#has_float() ? coc#util#float_scroll(1) : "\<C-f>"
	nnoremap <expr><C-b> coc#util#has_float() ? coc#util#float_scroll(0) : "\<C-b>"
<
						*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},
	第二个参数为响应结果。

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

	显示当前位置诊断详情，没有截断。

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

	重命名当前光标所在字符。

"workspaceSymbols" 				*coc-action-workspaceSymbols*

	搜索工作目录下所有符号。

"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')

==============================================================================

高亮 						*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`

  提醒标记符使用的高亮。

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`

  鼠标选择区使用的高亮。

==============================================================================

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-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' - 切换当前项选中状态
	'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': 跳转到定义处。

output 							 *coc-list-output*

	输出日志列表。

	可用操作:

	- 'open': 打开日志, 默认操作。

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: 	在配置文件中添加：
>
	"coc.preferences.diagnostic.displayByAle": true,
<
------------------------------------------------------------------------------

Q: 	我想使用 codeLens 特性。

A: 	CodeLens 特性需要支持虚拟文本特性的 neovim 版本，默认状态是关闭的。
	如需启用，需在配置文件中添加：
>
	  "coc.preferences.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:
