- Notifications
You must be signed in to change notification settings - Fork2.3k
Quickstart configs for Nvim LSP
License
neovim/nvim-lspconfig
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
nvim-lspconfig is a "data only" repo, providing basic, defaultNvim LSP clientconfigurations for various LSP servers. Viewall configs or:help lspconfig-all
from Nvim.
- These configs arebest-effort and supported by the community (you). Seecontributions.
- The configs live in
lsp/
.- Upgrade to Nvim 0.11+ and use
vim.lsp.enable('…')
(notrequire'…'.pyright.setup{}
) to enable a config.
- Upgrade to Nvim 0.11+ and use
- The configs in
lua/lspconfig/
aredeprecated and will be removed.- Upgrade to Nvim 0.11+ and use
vim.lsp.enable('…')
(notrequire'…'.pyright.setup{}
) to enable a config.
- Upgrade to Nvim 0.11+ and use
- Ask questions onGitHub Discussions, not the issue tracker.
- If you found a bug in Nvim LSP (
:help lsp
),report it to Neovim core.- Do not report it here. Only configuration data lives here.
- This repo only providesconfigurations. Its programmatic API is deprecated and must not be used externally.
- The "framework" parts (not the configs) of nvim-lspconfigwill be upstreamed to Nvim core.
- Requires Nvim 0.11+. Support for Nvim 0.10 will be removed. Update Nvim and nvim-lspconfig before reporting an issue.
- Install nvim-lspconfig using Vim's "packages" feature:
git clone https://github.com/neovim/nvim-lspconfig ~/.config/nvim/pack/nvim/start/nvim-lspconfig
- Or if you have Nvim 0.12 (in development), you can use the builtin plugin manager:
vim.pack.add{ {src='https://github.com/neovim/nvim-lspconfig'},}
- Or use a 3rd-party plugin manager (consult the documentation for your plugin manager).
- Install a language server, e.g.pyright
npm i -g pyright
- Add the language server setup to your init.lua.
- Nvim 0.11+ (seevim.lsp.config)
vim.lsp.enable('pyright')
- Nvim 0.10 (legacy,not supported)
require'lspconfig'.pyright.setup{}
- Nvim 0.11+ (seevim.lsp.config)
- Ensure your project/workspace contains a root marker as specified in
:help lspconfig-all
. - Open a code file in Nvim. LSP will attach and provide diagnostics.
nvim main.py
- Run
: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 thecmd
parameter, seevim.lsp.config.
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:
- Nvim 0.11+: You can extend a config as follows (seevim.lsp.config;you can also copy any config directly from
lsp/
and put it in a locallsp/
directory in your 'runtimepath').vim.lsp.config('rust_analyzer', {-- Server-specific settings. See `:help lsp-quickstart`settings= { ['rust-analyzer']= {}, },})
- Nvim 0.10 (legacy,not supported)
locallspconfig=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:
- Language server is not installed. nvim-lspconfig does not install language servers for you. You should be able to run the
cmd
defined in each server's Lua module from the command line and see that the language server starts. If thecmd
is an executable name instead of an absolute path to the executable, ensure it is on your path. - Missing filetype plugins. Certain languages are not detected by Vim/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 indoc/configs.md.
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
(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 fromconfigs.md, contributinga new configuration for it helps others, especially if the server requires special setup. Follow these steps:
- ReadCONTRIBUTING.md.
- Create a new file at
lsp/<server_name>.lua
.- Copy anexisting configto get started. Most configs are simple. For an extensive example seetexlab.lua.
- Ask questions onGitHub Discussions or in theNeovim Matrix room.
To publish a release:
- Create and push a newtag.
- After pushing the tag, aGitHub actionwill automatically package the plugin and publish the release to LuaRocks.
Copyright Neovim contributors. All rights reserved.
nvim-lspconfig is licensed under the terms of the Apache 2.0 license.
SeeLICENSE.md
About
Quickstart configs for Nvim LSP
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.