Site icon Teens Toons

neoclide/coc.nvim

Coc Logo

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?

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 like coc-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

  • Installation

    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 or init.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': '*' in Plug command.

    Note: The first time building from source code could be slow.

    Note: Nix-os Users must follow these steps:

    1. Install nodejs and yarn via nix-env or put them on /etc/nixos/configuration.nix
    2. sudo nixos-rebuild switch
    3. Plug 'neoclide/coc.nvim', {'tag': '*', 'do': 'yarn install'}
    4. Don’t forget to put: set shell=/bin/sh in your init.vim.
  • Completion with sources

  • Using snippets

  • Using extensions

  • Using list

  • Using configuration file

  • Language servers

  • Statusline integration

  • Debug language server

  • Debug coc.nvim

  • F.A.Q

Completion sources

Completion from words of buffers and file paths are supported by default.

For other completion sources, check out:

Or you can create custom source.

Extensions

Extensions are powerful than configured language server. Checkout
Using coc extensions.

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

❤️ coc.nvim? Help us keep it alive by donating funds😘!










































Feedback

Exit mobile version