Git Product home page Git Product logo

coc.nvim's Introduction

Logo

Make your Vim/Neovim as smart as VSCode.

Software License Actions Codecov Coverage Status Doc Gitter


Gif

Custom popup menu with snippet support

Why?

  • ๐Ÿš€ Fast: separated NodeJS process that does not block your vim most of the time.
  • ๐Ÿ’Ž Reliable: typed language, tested with CI.
  • ๐ŸŒŸ Featured: all LSP 3.16 features are supported, see :h coc-lsp.
  • โค๏ธ Flexible: configured like VSCode, extensions work like in VSCode

Quick Start

Make sure use vim >= 8.1.1719 or neovim >= 0.4.0.

Install nodejs >= 14.14:

curl -sL install-node.vercel.app/lts | bash

For vim-plug users:

" Use release branch (recommend)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Or build from source code by using yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'branch': 'master', 'do': 'yarn install --frozen-lockfile'}

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

Checkout Install coc.nvim for more info.

You have to install coc extension or configure language servers for LSP support.

Install extensions like:

:CocInstall coc-json coc-tsserver

Or configure language server in coc-settings.json opened by :CocConfig, like:

{
  "languageserver": {
    "go": {
      "command": "gopls",
      "rootPatterns": ["go.mod"],
      "trace.server": "verbose",
      "filetypes": ["go"]
    }
  }
}

Checkout wiki for more details:

Checkout :h coc-nvim for vim interface.

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 key mappings. Please use command like:verbose imap <tab> to make sure that your keymap has taken effect.

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

" Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable
" delays and poor user experience.
set updatetime=300

" Always show the signcolumn, otherwise it would shift the text each time
" diagnostics appear/become resolved.
set signcolumn=yes

" Use tab for trigger completion with characters ahead and navigate.
" NOTE: There's always complete item selected by default, you may want to enable
" no select by `"suggest.noselect": true` in your configuration file.
" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
" other plugin before putting this into your config.
inoremap <silent><expr> <TAB>
      \ coc#pum#visible() ? coc#pum#next(1) :
      \ CheckBackspace() ? "\<Tab>" :
      \ coc#refresh()
inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"

" Make <CR> to accept selected completion item or notify coc.nvim to format
" <C-g>u breaks current undo, please make your own choice.
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
                              \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"

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

" Use <c-space> to trigger completion.
if has('nvim')
  inoremap <silent><expr> <c-space> coc#refresh()
else
  inoremap <silent><expr> <c-@> coc#refresh()
endif

" Use `[g` and `]g` to navigate diagnostics
" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
nmap <silent> [g <Plug>(coc-diagnostic-prev)
nmap <silent> ]g <Plug>(coc-diagnostic-next)

" GoTo code navigation.
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 ShowDocumentation()<CR>

function! ShowDocumentation()
  if CocAction('hasProvider', 'hover')
    call CocActionAsync('doHover')
  else
    call feedkeys('K', 'in')
  endif
endfunction

" Highlight the symbol and its references when holding the cursor.
autocmd CursorHold * silent call CocActionAsync('highlight')

" Symbol renaming.
nmap <leader>rn <Plug>(coc-rename)

" Formatting selected code.
xmap <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

" Applying codeAction to the selected region.
" Example: `<leader>aap` for current paragraph
xmap <leader>a  <Plug>(coc-codeaction-selected)
nmap <leader>a  <Plug>(coc-codeaction-selected)

" Remap keys for applying codeAction to the current buffer.
nmap <leader>ac  <Plug>(coc-codeaction)
" Apply AutoFix to problem on the current line.
nmap <leader>qf  <Plug>(coc-fix-current)

" Run the Code Lens action on the current line.
nmap <leader>cl  <Plug>(coc-codelens-action)

" Map function and class text objects
" NOTE: Requires 'textDocument.documentSymbol' support from the language server.
xmap if <Plug>(coc-funcobj-i)
omap if <Plug>(coc-funcobj-i)
xmap af <Plug>(coc-funcobj-a)
omap af <Plug>(coc-funcobj-a)
xmap ic <Plug>(coc-classobj-i)
omap ic <Plug>(coc-classobj-i)
xmap ac <Plug>(coc-classobj-a)
omap ac <Plug>(coc-classobj-a)

" Remap <C-f> and <C-b> for scroll float windows/popups.
if has('nvim-0.4.0') || has('patch-8.2.0750')
  nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
  nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
  inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
  inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
  vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
  vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
endif

" Use CTRL-S for selections ranges.
" Requires 'textDocument/selectionRange' support of language server.
nmap <silent> <C-s> <Plug>(coc-range-select)
xmap <silent> <C-s> <Plug>(coc-range-select)

" Add `:Format` command to format current buffer.
command! -nargs=0 Format :call CocActionAsync('format')

" Add `:Fold` command to fold current buffer.
command! -nargs=? Fold :call     CocAction('fold', <f-args>)

" Add `:OR` command for organize imports of the current buffer.
command! -nargs=0 OR   :call     CocActionAsync('runCommand', 'editor.action.organizeImport')

" Add (Neo)Vim's native statusline support.
" NOTE: Please see `:h coc-status` for integrations with external plugins that
" provide custom statusline: lightline.vim, vim-airline.
set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}

" Mappings for CoCList
" Show all diagnostics.
nnoremap <silent><nowait> <space>a  :<C-u>CocList diagnostics<cr>
" Manage extensions.
nnoremap <silent><nowait> <space>e  :<C-u>CocList extensions<cr>
" Show commands.
nnoremap <silent><nowait> <space>c  :<C-u>CocList commands<cr>
" Find symbol of current document.
nnoremap <silent><nowait> <space>o  :<C-u>CocList outline<cr>
" Search workspace symbols.
nnoremap <silent><nowait> <space>s  :<C-u>CocList -I symbols<cr>
" Do default action for next item.
nnoremap <silent><nowait> <space>j  :<C-u>CocNext<CR>
" Do default action for previous item.
nnoremap <silent><nowait> <space>k  :<C-u>CocPrev<CR>
" Resume latest coc list.
nnoremap <silent><nowait> <space>p  :<C-u>CocListResume<CR>

Articles

Troubleshooting

Try these steps when you have problem with coc.nvim.

  • Make sure your Vim version >= 8.0 by command :version.
  • If service failed to start, use command :CocInfo or :checkhealth on Neovim.
  • Checkout the log of coc.nvim by command :CocOpenLog.
  • When you have issues with the language server, it's recommended to checkout the output.

Feedback

Backers

Become a backer and get your image on our README on GitHub with a link to your site.

Contributors


Qiming zhao

๐Ÿ’ป

Heyward Fann

๐Ÿ’ป

Raidou

๐Ÿ’ป

kevinhwang91

๐Ÿ’ป

ๅนด็ณ•ๅฐ่ฑ†ๆฑค

๐Ÿ’ป

Avi Dessauer

๐Ÿ’ป

ๆœ€ไธŠๅท

๐Ÿ’ป

Yatao Li

๐Ÿ’ป

wongxy

๐Ÿ’ป

Sam McCall

๐Ÿ’ป

Samuel Roeca

๐Ÿ’ป

Amirali Esmaeili

๐Ÿ’ป

Jack Rowlingson

๐Ÿ’ป

Jaehwang Jung

๐Ÿ’ป

Antoine

๐Ÿ’ป

Cosmin Popescu

๐Ÿ’ป

Duc Nghiem Xuan

๐Ÿ’ป

Francisco Lopes

๐Ÿ’ป

daquexian

๐Ÿ’ป

dependabot[bot]

๐Ÿ’ป

greenkeeper[bot]

๐Ÿ’ป

Chris Kipp

๐Ÿ’ป

Dmytro Meleshko

๐Ÿ’ป

Kirill Bobyrev

๐Ÿ’ป

Gontran Baerts

๐Ÿ’ป

Andy

๐Ÿ’ป

Cheng JIANG

๐Ÿ’ป

Corin

๐Ÿ’ป

Daniel Zhang

๐Ÿ’ป

Ferdinand Bachmann

๐Ÿ’ป

Guangqing Chen

๐Ÿ’ป

Jade Meskill

๐Ÿ’ป

Jasper Poppe

๐Ÿ’ป

Jean Jordaan

๐Ÿ’ป

Kid

๐Ÿ’ป

Pieter van Loon

๐Ÿ’ป

Robert Liebowitz

๐Ÿ’ป

Seth Messer

๐Ÿ’ป

UncleBill

๐Ÿ’ป

ZERO

๐Ÿ’ป

fsouza

๐Ÿ’ป

XiaoZhang

๐Ÿ’ป

whyreal

๐Ÿ’ป

yehuohan

๐Ÿ’ป

ใƒใ‚ฏใƒ€ใƒณใใ‚“

๐Ÿ’ป

Raphael

๐Ÿ’ป

tbodt

๐Ÿ’ป

Aaron McDaid

๐Ÿ’ป

Aasif Versi

๐Ÿ’ป

Abner Silva

๐Ÿ’ป

Adam Stankiewicz

๐Ÿ’ป

Adamansky Anton

๐Ÿ’ป

Ahmed El Gabri

๐Ÿ’ป

Alexandr Kondratev

๐Ÿ’ป

Andrew Shim

๐Ÿ’ป

Andy Lindeman

๐Ÿ’ป

Augustin

๐Ÿ’ป

Bastien Orivel

๐Ÿ’ป

Ben Lu

๐Ÿ’ป

Ben

๐Ÿ’ป

Brendan Roy

๐Ÿ’ป

brianembry

๐Ÿ’ป

br

๐Ÿ’ป

Cason Adams

๐Ÿ’ป

Chang Y

๐Ÿ’ป

Chayoung You

๐Ÿ’ป

Chen Lijun

๐Ÿ’ป

Chen Mulong

๐Ÿ’ป

Chris Weyl

๐Ÿ’ป

dezza

๐Ÿ’ป

Cody Allen

๐Ÿ’ป

Damien Rajon

๐Ÿ’ป

Daniel Eriksson

๐Ÿ’ป

Daniel Jenson

๐Ÿ’ป

David Mejorado

๐Ÿ’ป

Deric Pang

๐Ÿ’ป

Ding Tao

๐Ÿ’ป

Doron Behar

๐Ÿ’ป

Egor Kovetskiy

๐Ÿ’ป

ElKowar

๐Ÿ’ป

Emeliov Dmitrii

๐Ÿ’ป

Fabian Becker

๐Ÿ’ป

FallenWarrior2k

๐Ÿ’ป

Fausto Nรบรฑez Alberro

๐Ÿ’ป

Felipe Ramos

๐Ÿ’ป

Fredrik Borg

๐Ÿ’ป

Gavin Sim

๐Ÿ’ป

Gibson Fahnestock

๐Ÿ’ป

Giovanni Giordano

๐Ÿ’ป

Gopal Adhikari

๐Ÿ’ป

Hanh Le

๐Ÿ’ป

hedy

๐Ÿ’ป

Hendrik Lammers

๐Ÿ’ป

Henry Barreto

๐Ÿ’ป

Hugo

๐Ÿ’ป

Jackie Li

๐Ÿ’ป

Jakub Nowak

๐Ÿ’ป

James Pickard

๐Ÿ’ป

Jia Sui

๐Ÿ’ป

Ellie Hermaszewska

๐Ÿ’ป

Joel Bradshaw

๐Ÿ’ป

John Carlo Roberto

๐Ÿ’ป

Jonas Holst Damtoft

๐Ÿ’ป

Jonathan Lehman

๐Ÿ’ป

Joosep Alviste

๐Ÿ’ป

Josa Gesell

๐Ÿ’ป

Joshua Rubin

๐Ÿ’ป

Julian Grinblat

๐Ÿ’ป

Julian Valentin

๐Ÿ’ป

KabbAmine

๐Ÿ’ป

Kay Gosho

๐Ÿ’ป

Kenny Huynh

๐Ÿ’ป

Kevin Rambaud

๐Ÿ’ป

Kian Cross

๐Ÿ’ป

Kristijan Husak

๐Ÿ’ป

NullVoxPopuli

๐Ÿ’ป

Lasse Peters

๐Ÿ’ป

Noel Errenil

๐Ÿ’ป

LinArcX

๐Ÿ’ป

Liu-Cheng Xu

๐Ÿ’ป

Marc

๐Ÿ’ป

Marius Gawrisch

๐Ÿ’ป

Mark Hintz

๐Ÿ’ป

Mathieu Le Tiec

๐Ÿ’ป

Matt White

๐Ÿ’ป

Matthew Evans

๐Ÿ’ป

Me1onRind

๐Ÿ’ป

Qyriad

๐Ÿ’ป

Narcis B.

๐Ÿ’ป

Neur1n

๐Ÿ’ป

Nicolas Dermine

๐Ÿ’ป

Noah

๐Ÿ’ป

PENG Rui

๐Ÿ’ป

Paco

๐Ÿ’ป

Peng Guanwen

๐Ÿ’ป

Petter Wahlman

๐Ÿ’ป

Pooya Moradi

๐Ÿ’ป

Quade Morrison

๐Ÿ’ป

Ralf Vogler

๐Ÿ’ป

Ran Chen

๐Ÿ’ป

Ricardo Garcรญa Vega

๐Ÿ’ป

Rick Jones

๐Ÿ’ป

Ryan Christian

๐Ÿ’ป

Salo

๐Ÿ’ป

Sam Nolan

๐Ÿ’ป

Saurav

๐Ÿ’ป

Sean Mackesey

๐Ÿ’ป

Sheel Patel

๐Ÿ’ป

Solomon Ng

๐Ÿ’ป

Sri Kadimisetty

๐Ÿ’ป

Stephen Prater

๐Ÿ’ป

Sune Kibsgaard

๐Ÿ’ป

Aquaakuma

๐Ÿ’ป

Takumi Kawase

๐Ÿ’ป

The Blob SCP

๐Ÿ’ป

Tomasz N

๐Ÿ’ป

Tomoyuki Harada

๐Ÿ’ป

Tony Fettes

๐Ÿ’ป

Tony Narlock

๐Ÿ’ป

Tony Wang

๐Ÿ’ป

Victor Quach

๐Ÿ’ป

Whisperity

๐Ÿ’ป

William Turner

๐Ÿ’ป

Xiaochao Dong

๐Ÿ’ป

Hugh Hou

๐Ÿ’ป

Jackie Li

๐Ÿ’ป

Zachary Freed

๐Ÿ’ป

akiyosi

๐Ÿ’ป

alexjg

๐Ÿ’ป

aste4

๐Ÿ’ป

clyfish

๐Ÿ’ป

dev7ba

๐Ÿ’ป

diartyz

๐Ÿ’ป

doza-daniel

๐Ÿ’ป

equal-l2

๐Ÿ’ป

fong

๐Ÿ’ป

hexh

๐Ÿ’ป

hhiraba

๐Ÿ’ป

ic-768

๐Ÿ’ป

javiertury

๐Ÿ’ป

karasu

๐Ÿ’ป

kevineato

๐Ÿ’ป

Eduardo Costa

๐Ÿ’ป

micchy326

๐Ÿ’ป

midchildan

๐Ÿ’ป

minefuto

๐Ÿ’ป

miyanokomiya

๐Ÿ’ป

miyaviee

๐Ÿ’ป

monkoose

๐Ÿ’ป ๐Ÿ›

mujx

๐Ÿ’ป

mvilim

๐Ÿ’ป

naruaway

๐Ÿ’ป

piersy

๐Ÿ’ป

ryantig

๐Ÿ’ป

rydesun

๐Ÿ’ป

sc00ter

๐Ÿ’ป

smhc

๐Ÿ’ป

Sam Kaplan

๐Ÿ’ป

tasuten

๐Ÿ’ป

todesking

๐Ÿ’ป

typicode

๐Ÿ’ป

ๆŽ้ธฃ้ฃž

๐Ÿ’ป

Ikko Ashimine

๐Ÿ“–

Rammiah

๐Ÿ›

Alisue

๐Ÿ›

bigshans

๐Ÿ“–

Robert Boyd III

๐Ÿ›

Yuki Iwanaga

๐Ÿ’ป

SpringHack

๐Ÿ›

Lucas Burns

๐Ÿ“–

qiqiboy

๐Ÿ’ป

timsu92

๐Ÿ“–

Shawn M Moore

๐Ÿ’ป

This project follows the all-contributors specification. Contributions of any kind are welcome!

License

Anti 996

coc.nvim's People

Contributors

allcontributors[bot] avatar amiralies avatar antoinemadec avatar avi-d-coder avatar chemzqm avatar ckipp01 avatar cosminadrianpopescu avatar daquexian avatar dependabot[bot] avatar depfu[bot] avatar dmitmel avatar fannheyward avatar gbcreation avatar greenkeeper[bot] avatar iamcco avatar jrowlingson avatar kevinhwang91 avatar kirillbobyrev avatar oblitum avatar pappasam avatar rliebz avatar sam-mccall avatar statiolake avatar timsu92 avatar tomtomjhj avatar voldikss avatar weirongxu avatar xiyaowong avatar xuanduc987 avatar yatli avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.