Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

coc.nvim

Package Overview
Dependencies
Maintainers
1
Versions
110
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

coc.nvim

LSP based intellisense engine for neovim & vim8.

  • 0.0.66
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
613
decreased by-13.05%
Maintainers
1
Weekly downloads
 
Created
Source

Coc Logo

Make your vim/neovim as smart as VSCode.

Software License Bountysource Travis Coverage Doc Gitter


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

Gif

True snippet and additional text editing support

Floating windows require the master build of neovim to work, follow steps in the faq.

Check out doc/coc.txt for the vim interface.

Why?

Completion experience

You might be wondering why yet another completion engine since there is the already widely used [YouCompleteMe](https://github.com/Valloric/YouCompleteMe) and [deoplete.nvim](https://github.com/Shougo/deoplete.nvim).

Below are the reasons that led coc.nvim to build its own engine:

  • Full LSP completion support, especially snippet and additionalTextEdit feature, you'll understand why it's awesome when you experience it with a coc extension like coc-tsserver.
  • Asynchronous and parallel completion request, unless using vim sources, your vim will never be blocked.
  • Does completion resolving on completion item change. The details from completion items are echoed after being selected, this feature requires the CompleteChanged autocmd to work.
  • Incomplete request and cancel request support, only incomplete completion requests would be triggered on filtering completion items and cancellation requests are sent to servers only 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 the background (with debounce), while some completion engines use a cache which isn't always correct. Plus, 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 will 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

    Install nodejs:

    curl -sL install-node.now.sh/lts | sh
    # Optional install yarn if you want install extension by CocInstall command
    curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
    

    For vim-plug users:

    " Install nightly build, replace ./install.sh with install.cmd on windows
    Plug 'neoclide/coc.nvim', {'do': './install.sh nightly'}
    " Or install lastest release tag
    Plug 'neoclide/coc.nvim', {'tag': '*', 'do': './install.sh'}
    " Or build from source code
    Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}
    

    in your .vimrc or init.vim, then restart vim and run :PlugInstall.

    For other plugin managers, run command :call coc#util#install() to download lastest compiled javascript bundle.

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

    Note: Nix-os Users must follow these steps:

    1. Install nodejs and yarn via nix-env or put them in /etc/nixos/configuration.nix
    2. sudo nixos-rebuild switch
    3. Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}
    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

  • Using workspaceFolders

  • Language servers

Completion sources

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

For other completion sources, check out:

Or you can create a custom source.

Extensions

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

Plus more! To get a full list of coc extensions, search coc.nvim on npm.

Note: use :CocConfig to edit the configuration file. Completion & validation are supported after coc-json is installed.

Example vim configuration

Configuration is required to make coc.nvim easier to work with, since it doesn't change your key-mappings or vim options. This is done as much as possible to avoid conflict with your other plugins.

❗️Important: some vim plugins could change keymapping. Use a command like :verbose imap <tab> to make sure your keymap takes effect.

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

" Some servers have issues with backup files, see #649
set nobackup
set nowritebackup

" 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> to trigger completion.
inoremap <silent><expr> <c-space> coc#refresh()

" Use <cr> to 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` to 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 to show documentation in preview window
nnoremap <silent> K :call <SID>show_documentation()<CR>

function! s:show_documentation()
  if (index(['vim','help'], &filetype) >= 0)
    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` to format current buffer
command! -nargs=0 Format :call CocAction('format')

" Use `:Fold` to 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😘!

oblitum free-easy ruanyl robjuffermans iamcco phcerdan sarene robtrac raidou tomspeak taigacute weirongxu tbo darthShadow

Feedback

Keywords

FAQs

Package last updated on 27 Apr 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc