

coc.nvim - Intellisense Engine for Vim8 and Neovim
source link: https://www.tuicool.com/articles/hit/JF3MFjI
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Make your vim/neovim smart as VSCode.
Coc is an intellisense engine for vim8 & neovim.
It works on vim >= 8.1
and neovim >= 0.3.1
.
It's a completion framework and language server client which supports extension features of VSCode
True snippet and additional text edit support
Floating window requires master of neovim to work, follow the steps in the faq .
Checkout doc/coc.txt for vim interface.
Why?
- :rocket: Fast : instant increment completion , increment buffer sync using buffer update events.
- :gem: Reliable : typed language, tested with CI.
- :star2: Featured : full LSP support
- :heart: Flexible : configured as VSCode , extensions works like VSCode
Completion experience
You might be wondering why yet another completion engine since there is the already widely used YouCompleteMe and deoplete.nvim .
Below are the reasons that led coc.nvim to build it's own engine:
- Full LSP completion support , especially snippet and
additionalTextEdit
feature, you'll understand why it's awesome when you experience it with coc extension likecoc-tsserver
. - Asynchronous and parallel completion request , unless using vim sources, your vim will never blocked.
- Does completion resolve on completion item change . The detail from complete item is echoed after selected, this feature requires the
MenuPopupChanged
autocmd to work. - Incomplete request and cancel request support , only incomplete complete request would be triggered on filter complete items and cancellation request is send to servers when necessary.
- Start completion without timer . The completion will start after you type the first letter of a word by default and is filtered with new input after the completion has finished. Other completion engines use a timer to trigger completion so you always have to wait after the typed character.
- Realtime buffer keywords . Coc will generate buffer keywords on buffer change in background (with debounce), while some completion engines use a cache which could be wrong sometimes. And Locality bonus feature from VSCode is enabled by default.
- Filter completion items when possible. When you do a fuzzy filter with completion items, some completion engines would trigger a new completion, but coc.nvim will filter the items when possible which makes it much faster. Filtering completion items on backspace is also supported.
Table of contents
-
For vim-plug user. Add:
Plug 'neoclide/coc.nvim', {'tag': '*', 'do': { -> coc#util#install()}}
Or build from source code by install nodejs and yarn
curl -sL install-node.now.sh/lts | sh curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
And add:
Plug 'neoclide/coc.nvim', {'tag': '*', 'do': 'yarn install --frozen-lockfile'}
to your
.vimrc
orinit.vim
, restart vim and run:PlugInstall
.For other plugin managers, run command
:call coc#util#build()
to build coc from source code.Note:for vim users, global installed vim-node-rpc module is required.
Note:to build from master, don't use
'tag': '*'
inPlug
command.Note: The first time building from source code could be slow.
Note: Nix-os Users must follow these steps:
Completion sources
Completion from words of buffers and file paths are supported by default.
For other completion sources, check out:
- coc-sources : includes some common completion source extensions.
- coc-neco : viml completion support.
- coc-vimtex : vimtex integration.
- coc-neoinclude : neoinclude integration.
Or you can create custom source .
Extensions
Extensions are powerful than configured language server. Checkout Using coc extensions .
- coc-json for
json
. - coc-tsserver for
javascript
andtypescript
. - coc-html for
html
,handlebars
andrazor
. - coc-css for
css
,scss
andless
. - coc-vetur for
vue
, use vetur . - coc-java for
java
, use eclipse.jdt.ls . - coc-solargraph for
ruby
, use solargraph . - coc-rls for
rust
, use Rust Language Server - coc-yaml for
yaml
- coc-pyls for
python
, use Python Language Server - coc-highlight provide default document symbol highlight and colors support.
- coc-emmet provide emmet suggest in completion list.
- coc-snippets provide snippets solution.
And more, to get a full list of coc extensions, search coc.nvim on npm .
Note:use :CocConfig
to edit the configuration file, auto completion is supported after coc-json
has been installed.
Example vim configuration
" if hidden is not set, TextEdit might fail. set hidden " Better display for messages set cmdheight=2 " Smaller updatetime for CursorHold & CursorHoldI set updatetime=300 " don't give |ins-completion-menu| messages. set shortmess+=c " always show signcolumns set signcolumn=yes " Use tab for trigger completion with characters ahead and navigate. " Use command ':verbose imap <tab>' to make sure tab is not mapped by other plugin. inoremap <silent><expr> <TAB> \ pumvisible() ? "\<C-n>" : \ <SID>check_back_space() ? "\<TAB>" : \ coc#refresh() inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>" function! s:check_back_space() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction " Use <c-space> for trigger completion. inoremap <silent><expr> <c-space> coc#refresh() " Use <cr> for confirm completion, `<C-g>u` means break undo chain at current position. " Coc only does snippet and additional edit on confirm. inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>" " Use `[c` and `]c` for navigate diagnostics nmap <silent> [c <Plug>(coc-diagnostic-prev) nmap <silent> ]c <Plug>(coc-diagnostic-next) " Remap keys for gotos nmap <silent> gd <Plug>(coc-definition) nmap <silent> gy <Plug>(coc-type-definition) nmap <silent> gi <Plug>(coc-implementation) nmap <silent> gr <Plug>(coc-references) " Use K for show documentation in preview window nnoremap <silent> K :call <SID>show_documentation()<CR> function! s:show_documentation() if &filetype == 'vim' execute 'h '.expand('<cword>') else call CocAction('doHover') endif endfunction " Highlight symbol under cursor on CursorHold autocmd CursorHold * silent call CocActionAsync('highlight') " Remap for rename current word nmap <leader>rn <Plug>(coc-rename) " Remap for format selected region vmap <leader>f <Plug>(coc-format-selected) nmap <leader>f <Plug>(coc-format-selected) augroup mygroup autocmd! " Setup formatexpr specified filetype(s). autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') " Update signature help on jump placeholder autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') augroup end " Remap for do codeAction of selected region, ex: `<leader>aap` for current paragraph vmap <leader>a <Plug>(coc-codeaction-selected) nmap <leader>a <Plug>(coc-codeaction-selected) " Remap for do codeAction of current line nmap <leader>ac <Plug>(coc-codeaction) " Fix autofix problem of current line nmap <leader>qf <Plug>(coc-fix-current) " Use `:Format` for format current buffer command! -nargs=0 Format :call CocAction('format') " Use `:Fold` for fold current buffer command! -nargs=? Fold :call CocAction('fold', <f-args>) " Add diagnostic info for https://github.com/itchyny/lightline.vim let g:lightline = { \ 'colorscheme': 'wombat', \ 'active': { \ 'left': [ [ 'mode', 'paste' ], \ [ 'cocstatus', 'readonly', 'filename', 'modified' ] ] \ }, \ 'component_function': { \ 'cocstatus': 'coc#status' \ }, \ } " Using CocList " Show all diagnostics nnoremap <silent> <space>a :<C-u>CocList diagnostics<cr> " Manage extensions nnoremap <silent> <space>e :<C-u>CocList extensions<cr> " Show commands nnoremap <silent> <space>c :<C-u>CocList commands<cr> " Find symbol of current document nnoremap <silent> <space>o :<C-u>CocList outline<cr> " Search workspace symbols nnoremap <silent> <space>s :<C-u>CocList -I symbols<cr> " Do default action for next item. nnoremap <silent> <space>j :<C-u>CocNext<CR> " Do default action for previous item. nnoremap <silent> <space>k :<C-u>CocPrev<CR> " Resume latest coc list nnoremap <silent> <space>p :<C-u>CocListResume<CR>
Backers
:heart: coc.nvim? Help us keep it alive by donating funds :kissing_heart: !














Feedback
-
If you think it's useful, consider give it a star.
-
If you have a question, ask at gitter
-
如果你是中文用户,请到 中文 gitter 提问
-
If something not working, create a issue .
Recommend
-
53
GitHub is where people build software. More than 28 million people use GitHub to discover, fork, and contribute to over 85 million projects.
-
54
NVIM v0.4.0 · neovim/neovim@e2cc5fe · GitHub
-
61
README.md fzf ❤️ coc.nvim Use fzf instead of coc...
-
29
Coc.nvim 的小程序开发支持赵启明开源开发者,vimerCoc 现已全面支持小程序开发,支...
-
21
Files Permalink Latest commit message Commit time
-
68
配置nvim-lspconfig和clangd的注意事项 clangd可以通过homebrew安装 brew install llvm clangd一定要在PATH环境变量下,否则neovim找不到它,LSP也就不能生效。在Apple M1安装llvm后,它的路径在/o...
-
80
coc-rust-analyzer rust-analyzer for Vim/Neovim, works as an extension with coc.nvim. Install :CocInstall coc-rust-analyzer
-
8
ripgrep.vim A plugin for Vim8/Neovim to search text by ripgrep (rg). What's different from jremmen/vim-ripgrep? Calling...
-
10
Thoughts on coc.nvim Aug 1, 2021 虽然我是 @neoclide 组织成员, 但以下内容并不是 @neoclide 官方言论,不代表 @neoclide 官方立...
-
6
coc.nvim 补全常见问题 精选 原创 小二上酒8 2022-09-19 11:25:41...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK