nvim-lspconfig is a "data only" repo, providing basic, default Nvim LSP client
configurations for various LSP servers. View all configs or :help lspconfig-all
from Nvim.
lsp/
.vim.lsp.enable('…')
(not require'lspconfig'.….setup{}
) to enable a config.lua/lspconfig/
are deprecated and will be removed.vim.lsp.enable('…')
(not require'lspconfig'.….setup{}
) to enable a config.:help lsp
), report it to Neovim core.require'lspconfig'
"framework" is deprecated and will be removed.vim.lsp.config
).git clone https://github.com/neovim/nvim-lspconfig ~/.config/nvim/pack/nvim/start/nvim-lspconfig
vim.pack
plugin manager:vim.pack.add{
{ src = 'https://github.com/neovim/nvim-lspconfig' },
}
npm i -g pyright
vim.lsp.enable('pyright')
:help lspconfig-all
.nvim main.py
:checkhealth vim.lsp
to see the status or to troubleshoot.See :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:
vim.lsp.config('jdtls', {
cmd = { '/path/to/jdtls' },
})
Nvim sets default options and mappings when LSP is active in a buffer:
To customize, see:
Extra settings can be specified for each LSP server. With Nvim 0.11+ you can
extend a config by calling
vim.lsp.config('…', {…})
. (You can also copy any config directly from
lsp/
and put it in a local lsp/
directory in your 'runtimepath').
vim.lsp.config('rust_analyzer', {
-- Server-specific settings. See `:help lsp-quickstart`
settings = {
['rust-analyzer'] = {},
},
})
To create a new config you can either (1) use vim.lsp.config
or (2) create
a file lsp/<config-name>.lua
somewhere on your 'runtimepath'.
:lua vim.lsp.config('foo', {cmd={'true'}})
:lua vim.lsp.enable('foo')
:checkhealth vim.lsp
, the new config is listed under "Enabled Configurations". 😎lsp/foo.lua
somewhere on your 'runtimepath'.:exe 'edit' stdpath('config') .. '/lsp/foo.lua'
return {
cmd = { 'true' },
}
++p
to ensure its parent directory is created).:write ++p
:lua vim.lsp.enable('foo')
:checkhealth vim.lsp
, the new config is listed under "Enabled Configurations". 🌈Start with :checkhealth vim.lsp
to troubleshoot. The most common reasons a language server does not start or attach are:
Language server is not installed. nvim-lspconfig does not install language servers for you. You should be able to run the cmd
defined in the config from the command line and see that the language server starts. If the cmd
is a name instead of an absolute path, ensure it is on your $PATH
.
Missing filetype plugins. Some languages are not detected by Nvim because they have not yet been added to the filetype detection system. Ensure :set filetype?
shows the filetype and not an empty value.
Not triggering root detection. Some language servers require a "workspace", which is found by looking for an ancestor directory that contains a "root marker". The most common root marker is .git/
, but each config defines other "root marker" names. Root markers/directories are listed in :help lspconfig-all
.
You can also explicitly set a root instead of relying on automatic detection by enabling 'exrc'
and adding an .nvim.lua
at the desired root dir with the following code:
vim.lsp.config('<client name>', {
root_dir = vim.fn.fnamemodify(debug.getinfo(1, 'S').source:sub(2), ':p:h'),
})
Note that prior to nvim 0.12 exrc
file is executed only if it's inside of a cwd where you start nvim
.
If you found a bug with LSP functionality, report it to Neovim core.
Before reporting a bug, check your logs and the output of :checkhealth vim.lsp
. Add this to your init.lua to enable verbose logging:
vim.lsp.set_log_level("debug")
Attempt to run the language server, then run :LspLog
to open the log.
Most of the time, the reason for failure is present in the logs.
:LspInfo
(alias to :checkhealth vim.lsp
) 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.:LspStop [<client_id_or_name>]
Stops the given server. Defaults to stopping all servers active on the current buffer. To force stop add ++force
:LspRestart [<client_id_or_name>]
Restarts the given client, and attempts to reattach to all previously attached buffers. Defaults to restarting all active servers.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:
lsp/<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