-
-
Notifications
You must be signed in to change notification settings - Fork 959
Completion with sources
-
Full LSP completion support, especially snippet and
additionalTextEdit
feature. - Completion resolving on completion item change, asynchronous completion resolve on completion item change and the detail and documentation will be shown in a float window when possible.
- Asynchronous and parallel completion request. Unless using vim sources, your vim will never be blocked.
- Incomplete request and cancel request support, only incomplete completion requests will be triggered on filtering completion items and cancellation requests are sent to servers only when necessary.
- Real-time buffer keywords, generate buffer keywords on buffer change with only changed lines. Plus, Locality bonus feature from VSCode is enabled by default.
- Filter completion items when possible. When you do a fuzzy filter with completion items, coc.nvim will filter the items when possible, which makes it much faster.
There are 3 different trigger modes:
-
always
, the default mode, which triggers completion on a letter inserted ortriggerCharacters
(or trigger pattern match) defined by the current activated sources. -
trigger
, only trigger completion when you typetriggerCharacters
(or trigger pattern match) defined by the completion sources. -
none
, disable auto trigger completion, you will have to trigger the completion manually.
Lots of completion behavior can be changed by using the configuration file, check out :h coc-config-suggest
for details.
There's no function of coc.nvim that can be used as omnifunc
because it's not possible to support all LSP completion features when using omnifunc
.
For features like textEdit
and additionalTextEdits
(mostly used by automatic import feature) of LSP to work, you have to confirm completion by coc#pum#confirm()
Indent by indent keys is blocked during completion to avoid unexpected indent when selecting completion item, to trigger indent, use coc#pum#confirm()
or coc#pum#insert()
to finish completion.
You have to remap <cr>
to make it confirms completion.
inoremap <expr> <cr> coc#pum#visible() ? coc#pum#confirm() : "\<CR>"
To make <cr>
select the first completion item and confirm the completion when no item has been selected:
inoremap <silent><expr> <cr> coc#pum#visible() ? coc#_select_confirm() : "\<C-g>u\<CR>"
Note: \<C-g>u
is used to break undo level.
To make coc.nvim format your code on <cr>
:
inoremap <silent><expr> <cr> coc#pum#visible() ? coc#_select_confirm() : "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
Use coc#pum#info()
if you need to confirm completion, only when there's selected complete item:
inoremap <silent><expr> <cr> coc#pum#visible() && coc#pum#info()['index'] != -1 ? coc#pum#confirm() : "\<C-g>u\<CR>"
You can make use of coc#refresh()
to trigger completion like this:
" use <tab> for trigger completion and navigate to the next complete item
function! CheckBackspace() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
inoremap <silent><expr> <Tab>
\ coc#pum#visible() ? coc#pum#next(1) :
\ CheckBackspace() ? "\<Tab>" :
\ coc#refresh()
Note: the <tab>
could be remapped by another plugin, use :verbose imap <tab>
to check if it's mapped as expected.
" use <c-space>for trigger completion
inoremap <silent><expr> <c-space> coc#refresh()
" Use <C-@> on vim
inoremap <silent><expr> <c-@> coc#refresh()
inoremap <expr> <Tab> coc#pum#visible() ? coc#pum#next(1) : "\<Tab>"
inoremap <expr> <S-Tab> coc#pum#visible() ? coc#pum#prev(1) : "\<S-Tab>"
Use command :CocList sources
to get current completion source list.
Name | Shortcut | Description |
---|---|---|
around |
[A] | Words of the current buffer. |
buffer |
[B] | Words of other open buffers. |
file |
[F] | Filename completion, auto-detected. |
You can configure completion sources by using coc-settings.json
-
"coc.source.{name}.enable"
: controls if the source is enabled. -
"coc.source.{name}.shortcut"
: shortcut used in completion menu. -
"coc.source.{name}.priority"
: priority of the source, lower priority sources will be sorted after high priority sources when they have same score. -
"coc.source.{name}.disableSyntaxes"
: syntax names used to disable source from completion, eg:["comment", "string"]
-
"coc.source.around.firstMatch"
: Filter complete items by first letter strict match, defaulttrue
. -
"coc.source.buffer.firstMatch"
: Filter complete items by first letter strict match, defaulttrue
. -
"coc.source.buffer.ignoreGitignore"
: Ignore git ignored files for buffer words, defaulttrue
. -
"coc.source.file.trimSameExts"
: Filename extensions to trim extension names on file completion, default[".ts", ".js"]
-
"coc.source.file.ignoreHidden"
: Ignore completion for hidden files, defaulttrue
. -
coc.source.file.ignorePatterns
: Ignore patterns of matcher module, default[]
.
- coc-sources: includes some common completion source extensions.
- coc-neco: viml completion support.
- coc-snippets: snippets solution for coc.nvim
- coc-vimtex: vimtex integration.
- coc-neoinclude: neoinclude integration.
- coc-lbdbq: email address completion.
- coc-browser: web browser words completion.
- coc-github-users: GitHub username completion.
- coc-db: Database completion.
- sphinx.nvim: Source for Sphinx's cross-referencing roles.