-
-
Notifications
You must be signed in to change notification settings - Fork 958
Install coc.nvim
Coc.nvim is mostly written in TypeScript and runs on Node.js.
-
neovim
>=0.8.0
orvim
>=9.0.0438
(run:version
orvim --version
to find your Vim version) -
node
>=16.18
Install Node.js
Note: coc.nvim finds node
by calling executable('node')
from within vim. Check out
:h g:coc_node_path
to customize node path.
Note: NixOS users must follow these steps:
- Install Node.js via
nix-env
or put it in/etc/nixos/configuration.nix
sudo nixos-rebuild switch
Using vim-plug
Use coc's release branch (recommended):
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Build from source:
Plug 'neoclide/coc.nvim', { 'branch': 'master', 'do': 'npm ci' }
Run command :PlugInstall
in your (neo)vim.
Using packer.nvim
Use default release branch (recommended):
use {'neoclide/coc.nvim', branch = 'release'}
Build from source:
use {'neoclide/coc.nvim', branch = 'master', run = 'npm ci'}
Run command :PackerInstall
in your (neo)vim.
Using dein.vim
Use release branch (recommended):
call dein#add('neoclide/coc.nvim', { 'merged': 0, 'rev': 'release' })
Build from source:
call dein#add('neoclide/coc.nvim', { 'merged': 0, 'rev': 'master', 'build': 'npm ci' })
Note: When 'merged': 0
not present, coc.nvim not able to start.
Note: Depends on your network and CPU, first build might take a while.
If you have trouble compiling from source when using dein, try these shell commands:
cd ~/.cache/dein/repos/github.com/neoclide/coc.nvim
git clean -xfd
npm ci
Using NeoBundle
Use release
branch:
NeoBundle 'neoclide/coc.nvim', {'branch': 'master', 'build': 'npm ci'}
Using Paq
Use the release
branch.
{"neoclide/coc.nvim", branch="release"};
Using pathogen.vim
cd ~/.vim/bundle
git clone -b release https://github.com/neoclide/coc.nvim
Unzip source code from release branch:
vim8:
mkdir -p ~/.vim/pack/coc/start
cd ~/.vim/pack/coc/start
git clone --branch release https://github.com/neoclide/coc.nvim.git --depth=1
vim -c "helptags coc.nvim/doc/ | q"
neovim:
mkdir -p ~/.local/share/nvim/site/pack/coc/start
cd ~/.local/share/nvim/site/pack/coc/start
git clone --branch release https://github.com/neoclide/coc.nvim.git --depth=1
nvim -c "helptags coc.nvim/doc/ | q"
To check and see if the coc.nvim service is running, use command :checkhealth
in neovim (not supported by vim); the output looks like:
Set g:coc_node_path
variable to specify which node
executable to start coc.nvim service from.
Another useful command is :CocInfo
— use it after the service has started to get some useful information on it.
For example, for generic web-development consider :CocInstall coc-tsserver coc-json coc-html coc-css
For Python3 :CocInstall coc-pyright
For PHP :CocInstall coc-phpls
and so on...
For more information check out Using coc extensions
Run :CocConfig
, which will open main config file ~/.config/nvim/coc-settings.json
(empty for new installation). Add empty JSON object (like {}
) and add a list of language servers configurations not already covered by existing extensions (e.g. if you already installed coc-pyright
, you don't need to add configuration for the pyls
server).
For more information check out Using the configuration file
For features like workspace_didChangeWatchedFiles to work, you will need to install watchman by following https://facebook.github.io/watchman/docs/install.
Watchman works great even when you have multiple (neo)vim instances started in the same directory. You can configure watchman to ignore some directories with .watchmanconfig
configuration file in your project root:
{
"ignore_dirs": [
"dist",
"node_modules"
]
}
Warning: Don't create .watchmanconfig
file in your home directory.
Note: An undocumented global configuration: put .watchman.json
in your $HOME root, https://github.com/facebook/watchman/blob/ebeb2427595e8c758a05fe9e6f9a63797216c4ab/watchman/WatchmanConfig.cpp#L97
Note: watchman can use a lot of memory! Run watchman watch-del-all
in your shell to free some memory.
To set up coc.nvim and extensions faster on different machines, you can use a shell script, for example:
#!/usr/bin/env bash
set -o nounset # error when referencing undefined variable
set -o errexit # exit when command fails
# Install latest nodejs
if [ ! -x "$(command -v node)" ]; then
curl --fail -LSs https://install-node.now.sh/latest | sh
export PATH="/usr/local/bin/:$PATH"
# Or use package manager, e.g.
# sudo apt-get install nodejs
fi
# Use package feature to install coc.nvim
# for vim8
mkdir -p ~/.vim/pack/coc/start
cd ~/.vim/pack/coc/start
curl --fail -L https://github.com/neoclide/coc.nvim/archive/release.tar.gz | tar xzfv -
# for neovim
# mkdir -p ~/.local/share/nvim/site/pack/coc/start
# cd ~/.local/share/nvim/site/pack/coc/start
# curl --fail -L https://github.com/neoclide/coc.nvim/archive/release.tar.gz | tar xzfv -
# Install extensions
mkdir -p ~/.config/coc/extensions
cd ~/.config/coc/extensions
if [ ! -f package.json ]
then
echo '{"dependencies":{}}'> package.json
fi
# Change extension names to the extensions you need
npm install coc-snippets --global-style --ignore-scripts --no-bin-links --no-package-lock --only=prod