GitHub - neovim/nvim-lspconfig: Quickstart configs for Nvim LSP (original) (raw)

nvim-lspconfig

nvim-lspconfig is a "data only" repo, providing basic, default Nvim LSP clientconfigurations for various LSP servers. View all configs or :help lspconfig-all from Nvim.

Important ⚠️

Install

LuaRocks

git clone https://github.com/neovim/nvim-lspconfig ~/.config/nvim/pack/nvim/start/nvim-lspconfig  

Quickstart

  1. Install a language server, e.g. pyright
  2. Add the language server setup to your init.lua.
    • Nvim 0.11+ (see vim.lsp.config)
      vim.lsp.enable('pyright')
    • Nvim 0.10 (legacy, not supported)
      require'lspconfig'.pyright.setup{}
  3. Ensure your project/workspace contains a root marker as specified in :help lspconfig-all.
  4. Open a code file in Nvim. LSP will attach and provide diagnostics.
  5. 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 the cmd parameter, see vim.lsp.config.

Configuration

Nvim sets some default options and mappings when a buffer attaches to LSP (see :help lsp-config). In particular:

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.

Extra settings can be specified for each LSP server:

vim.lsp.config

nvim-lspconfig includes configurations compatible with vim.lsp under lsp/, so servers can be enabled (auto-activated when a filetype is opened) with:

vim.lsp.enable('pyright')

and configured with:

vim.lsp.config('pyright', { cmd = { … }, })

which extends the configuration under lsp/. For further information see :help lsp-config.

Troubleshooting

The most common reasons a language server does not start or attach are:

  1. 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 the cmd is an executable name instead of an absolute path to the executable, ensure it is on your path.
  2. 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.
  3. 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 doc/configs.md.

Bug reports

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:

Most of the time, the reason for failure is present in the logs.

Commands

Contributions

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:

  1. Read CONTRIBUTING.md.
  2. Create a new file at lsp/SERVER_NAME.lua.
  3. Ask questions on GitHub Discussions or in the Neovim Matrix room.

Release process

To publish a release:

License

Copyright Neovim contributors. All rights reserved.

nvim-lspconfig is licensed under the terms of the Apache 2.0 license.

See LICENSE.md