Skip to content

Language Server Protocol (LSP) support for vim & neovim, featured as VSCode

License

Notifications You must be signed in to change notification settings

op3ntrap/coc.nvim

Β 
Β 

Repository files navigation

Conqure of Completion

CI (Linux, macOS) Coverage Gitter Doc
Build Status Badge Coverage Badge Gitter Badge Doc Badge

Coc is an intellisense engine for vim8 & neovim.

It's a completion framework, language server client with support of extensions featured as VSCode has.

example.gif

True snippet and additional text edit support

Checkout doc/coc.txt for vim interface.

Why?

Table of contents

Completion sources

Name Description Filetypes Requirement
around Words of current buffer. all
buffer Words of none current buffer. all
dictionary Words from files of dictionary option. all
tag Words from taglist of current buffer. all
file Filename completion. all
omni Invoke omnifunc for complete items []
word Words from google 10000 english repo. all
emoji Emoji characters. all
include Full path completion. all
gocode Completion using gocode ['go'] Install gocode
ultisnips Snippets completion all Install ultisnips
neco Viml completion vim Install neco-vim
neosnippet Snippets completion all Install neosnippet.vim
  • To enable omni source for certain files, open coc-settings.json by :CocConfig, then add configuration like:

    "coc.source.omni.filetypes": ["python"],
    
  • To complete sources: include, emoji and word, use mapping of <Plug>(coc-complete-custom)

Extensions

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

  • Tsserver

    Used for javascript and typescript

      :CocInstall coc-tsserver
    
  • Html

    Used for html handlebars razor

      :CocInstall coc-html
    
  • Json

    Used for json and jsonc

      :CocInstall coc-json
    
  • Css

    Used for css scss less and wxss

      :CocInstall coc-css
    
  • Wxml

      :CocInstall coc-wxml
    
  • Vetur

    Used for vue

      :CocInstall coc-vetur
    
  • Solargraph

    Used for ruby

    Install solargraph by:

      gem install solargraph
    

    then

      :CocInstall coc-solargraph
    
  • Pyls

    Used for python

    Install pyls by:

      pip install 'python-language-server[all]'
    

    then

      :CocInstall coc-pyls
    
  • Stylelint

    Used for css wxss scss less markdown postcss sugarss vue.

      :CocInstall coc-stylelint
    
  • Eslint

    Used for javascript

      :CocInstall coc-eslint
    
  • Tslint

    Used for typescript

      :CocInstall coc-tslint
    

Note: use :CocConfig to edit configuration file, auto completion is supported after coc-json installed.

Example vim configuration

" if hidden not set, TextEdit might fail.
set hidden

" Better display for messages
set cmdheight=2

" always show signcolumns
set signcolumn=yes

" Use tab for trigger completion with characters ahead and navigate.
inoremap <silent><expr> <TAB>
      \ pumvisible() ? "\<C-n>" :
      \ <SID>check_back_space() ? "\<TAB>" :
      \ coc#refresh()
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"

" Use <c-space> for trigger completion.
inoremap <silent><expr> <c-space> coc#refresh()

" Use <C-x><C-o> to complete 'word', 'emoji' and 'include' sources
imap <silent> <C-x><C-o> <Plug>(coc-complete-custom)

function! s:check_back_space() abort
  let col = col('.') - 1
  return !col || getline('.')[col - 1]  =~# '\s'
endfunction

" Use <cr> for confirm completion.
" 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

" Show signature help while editing
autocmd CursorHoldI,CursorMovedI * silent! call CocAction('showSignatureHelp')

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

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

" 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'
      \ },
      \ }



" Shortcuts for denite interface
" Show symbols of current buffer
nnoremap <silent> <space>o  :<C-u>Denite coc-symbols<cr>
" Search symbols of current workspace
nnoremap <silent> <space>t  :<C-u>Denite coc-workspace<cr>
" Show diagnostics of current workspace
nnoremap <silent> <space>a  :<C-u>Denite coc-diagnostic<cr>
" Show available commands
nnoremap <silent> <space>c  :<C-u>Denite coc-command<cr>
" Show available services
nnoremap <silent> <space>s  :<C-u>Denite coc-service<cr>
" Show links of current buffer
nnoremap <silent> <space>l  :<C-u>Denite coc-link<cr>

Feedback

If you like this plugin, star it! It's a great way of getting feedback. The same goes for reporting issues or feature requests.

Contact: Gitter Twitter

LICENSE

FOSSA Status

About

Language Server Protocol (LSP) support for vim & neovim, featured as VSCode

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 87.2%
  • Vim Script 7.7%
  • Python 2.6%
  • JavaScript 1.8%
  • Other 0.7%