A modular Vim/Neovim configuration

Home | About | Quick start guide | Documentation | Development | Community | Sponsors | 中文

Available Layers » lsp


This layers adds extensive support for language-server-protocol. By default, this layer use following language server client implementations:

  1. vim-lsp: for vim
  2. LanguageClient-neovim: for neovim
  3. built-in lsp: for neovim(>=0.5.0)


Note: All these features depend on the implementation of the language server, please check the list of Language Servers


To use this configuration layer, update your custom configuration file with:

  name = "lsp"

Install language server


After installing AdaCore’s GNAT Studio, add the directory containing ada_language_server to your PATH variable. For instance, if the GNAT Studio 2020 was installed, ada_language_server is present by default in /opt/GNAT/2020/libexec/gnatstudio/als.


npm i -g bash-language-server


npm install -g javascript-typescript-langserver


pip install --user python-language-server


The LanguageServer package must be installed in Julia (0.6 or greater), i.e.

julia> Pkg.clone("")

With new package system in Julia 0.7 and above, we have a package mode in Julia REPL. in REPL, hit ] to enter the package management mode, then add LanguageServer to install the package.


npm install -g purescript-language-server


npm install vue-language-server -g


npm install -g vscode-css-languageserver-bin


gem install solargraph


npm install -g @elm-tooling/elm-language-server
npm install -g elm elm-test elm-format


npm install -g vim-language-server



If you are using nvim(>=0.5.0). You need to use enabled_clients to specific the language servers. for example:

    name = 'lsp'
    enabled_clients = ['vimls', 'clangd']

To override the command of client, you may need to use override_client_cmds option:

  name = "lsp"
  enabled_clients = ['vimls', 'clangd']
    vimls = ["vim-language-server", "--stdio"]

vim or neovim(<0.5.0)

To enable lsp support for a specified filetype, you may need to load this layer with filetypes option, for example:

  name = "lsp"
  filetypes = [

default language server commands:

language server command
ada ['ada_language_server']
c ['clangd']
cpp ['clangd']
crystal ['scry']
css ['css-languageserver', '--stdio']
dart ['dart_language_server']
elm ['elm-language-server']
go ['gopls']
haskell ['hie', '--lsp']
html ['html-languageserver', '--stdio']
javascript ['typescript-language-server', '--stdio']
javascriptreact ['typescript-language-server', '--stdio']
julia ['julia', '--startup-file=no', '--history-file=no', '-e', 'using LanguageServer; server = LanguageServer.LanguageServerInstance(STDIN, STDOUT, false); server.runlinter = true; run(server);']
objc ['clangd']
objcpp ['clangd']
php ['php', 'path/to/bin/php-language-server.php']
purescript ['purescript-language-server', '--stdio']
python ['pyls']
ruby ['solargraph', 'stdio']
reason ['ocaml-language-server']
rust ['rustup', 'run', 'nightly', 'rls']
sh ['bash-language-server', 'start']
typescript ['typescript-language-server', '--stdio']
typescriptreact ['typescript-language-server', '--stdio']
vim ['vim-language-server', '--stdio']
vue ['vls']

To override the server command, you may need to use override_cmd option:

  name = "lsp"
  filetypes = [
    rust = ["rustup", "run", "nightly", "rls"]

Key bindings

Key Binding Description
K / SPC l d show document
SPC l e rename symbol

if the checkers layer is not loaded, these key bindings will be added:

Key description
SPC e c clear errors
SPC e n jump to the position of next error
SPC e N jump to the position of previous error
SPC e p jump to the position of previous error
SPC e l display a list of all the errors
SPC e L display a list of all the errors and focus the errors buffer

Powered by Jekyll