nvim-lspconfig is a "data only" repo, providing basic, default Nvim LSP client configurations for various LSP servers.
View the documentation for all configs or :help lspconfig-all from Nvim.
:help lsp), report it to Neovim core.
git clone https://github.com/neovim/nvim-lspconfig ~/.config/nvim/pack/nvim/start/nvim-lspconfig
npm i -g pyrightrequire'lspconfig'.pyright.setup{}:help lspconfig-all.nvim main.py
:checkhealth lsp to see the status or to troubleshoot.Read :help lspconfig for details. Read :help lspconfig-all for the full list of server-specific details.
For servers not on your $PATH (e.g., jdtls, elixirls), you must manually set the cmd parameter when calling setup().
Nvim sets some default options and mappings when a buffer attaches to LSP (see :help lsp-config). In particular:
'tagfunc'
<C-]> and other tag commands.'omnifunc'
<C-X><C-O> in Insert mode. For autocompletion, an autocompletion plugin is required.'formatexpr'
gq.K maps to vim.lsp.buf.hover() in Normal mode.[d and ]d map to vim.diagnostic.goto_prev() and vim.diagnostic.goto_next(), respectively.<C-W>d maps to vim.diagnostic.open_float().Further customization can be achieved using the LspAttach autocommand event.
The LspDetach autocommand event can be used to "cleanup" mappings if a buffer becomes detached from an LSP server.
See :h LspAttach and :h LspDetach for details and examples.
See :h lsp-buf for details on other LSP functions.
Additional configuration options can be provided for each LSP server by passing arguments to the setup function. See :h lspconfig-setup for details. Example:
local lspconfig = require('lspconfig')
lspconfig.rust_analyzer.setup {
-- Server-specific settings. See `:help lspconfig-setup`
settings = {
['rust-analyzer'] = {},
},
}The most common reasons a language server does not start or attach are:
cmd defined in each server's Lua module from the command line and see that the language server starts. If the cmd is an executable name instead of an absolute path to the executable, ensure it is on your path.:set ft? shows the filetype and not an empty value..git folder, but each server defines the root config in the lua file. See doc/configs.md or the source for the list of root directories.capabilities for each setup {} if you want these to take effect.setup {} twice for the same server. The second call to setup {} will overwrite the first.If you found a bug with LSP functionality, report it to Neovim core.
Before reporting a bug, check your logs and the output of :LspInfo. Add the following to your init.vim to enable logging:
vim.lsp.set_log_level("debug")Attempt to run the language server, and open the log with:
:LspLog
Most of the time, the reason for failure is present in the logs.
:LspInfo (deprecated alias to :che lspconfig) shows the status of active and configured language servers.:LspStart <config_name> Start the requested server name. Will only successfully start if the command detects a root directory matching the current config. Pass autostart = false to your .setup{} call for a language server if you would like to launch clients solely with this command. Defaults to all servers matching current buffer filetype.:LspStop <client_id> Defaults to stopping all buffer clients.:LspRestart <client_id> Defaults to restarting all buffer clients.If a language server is missing from configs.md, contributing a new configuration for it helps others, especially if the server requires special setup. Follow these steps:
lua/lspconfig/configs/SERVER_NAME.lua.
To publish a release:
Copyright Neovim contributors. All rights reserved.
nvim-lspconfig is licensed under the terms of the Apache 2.0 license.
See LICENSE.md