nvim-lspconfig README

The project's README from github.com/neovim/nvim-lspconfig. As one markdown file: README.md.

nvim-lspconfig

nvim-lspconfig is a collection of LSP server configurations for the Nvim LSP client.

View all configs, or run :help lspconfig-all from Nvim.

Important ⚠️

Migration instructions

  1. Upgrade to Nvim 0.11+
  2. (Optional) Use vim.lsp.config('…') (not require'lspconfig'.….setup{}) to customize or define a config.
  3. Use vim.lsp.enable('…') (not require'lspconfig'.….setup{}) to enable a config, so that it activates for its filetypes.

Support

These configs are best-effort and supported by the community (you). See contributions.

Install

LuaRocks

Quickstart

  1. Install a language server, e.g. pyright
    npm i -g pyright
    
  2. Enable its config in your init.lua (:help lsp-quickstart).
    vim.lsp.enable('pyright')
    
  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.
    nvim main.py
    
  5. Run :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' },
})

Commands

Configuration

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('…', {…}).

vim.lsp.config('rust_analyzer', {
  -- Server-specific settings. See `:help lsp-quickstart`
  settings = {
    ['rust-analyzer'] = {},
  },
})

Config priority

Configs are sourced in this order:

  1. lsp/ in 'runtimepath'
  2. after/lsp/ in 'runtimepath'
  3. vim.lsp.config()

If you install nvim-lspconfig or similar plugins, the order that configs are applied depends on the load order. To ensure that your own config "wins" and overrides the others, use after/lsp/ and/or vim.lsp.config() to override/extend the defaults.

Creating a config

As code

  1. Run :lua vim.lsp.config('foo', {cmd={'true'}})
  2. Run :lua vim.lsp.enable('foo')
  3. Run :checkhealth vim.lsp, the new config is listed under "Enabled Configurations". 😎

As a file

  1. Create a file after/lsp/foo.lua somewhere on your 'runtimepath'.
    :exe 'edit' stdpath('config') .. '/after/lsp/foo.lua'
    
  2. Add this code to the file (or copy any of the examples from the lsp/ directory in this repo):
    return {
      cmd = { 'true' },
    }
    
  3. Save the file (with ++p to ensure its parent directory is created).
    :write ++p
    
  4. Enable the config.
    :lua vim.lsp.enable('foo')
    
  5. Run :checkhealth vim.lsp, the new config is listed under "Enabled Configurations". 🌈

LSP Settings Type Annotations

nvim-lspconfig generates Lua type definitions for each supported LSP server. By manually adding annotations (e.g., ---@type lspconfig.settings.server_name), you enable auto-completion and diagnostics for your server settings.

Example:

---@type vim.lsp.Config
local config = {
  ---@type lspconfig.settings.lua_ls
  settings = {
    Lua = {
      runtime = {
        version = 'LuaJIT',
      },
      workspace = {
        preloadFileSize = 10000,
        library = {
          vim.env.VIMRUNTIME,
        }
      },
    },
  },
}

vim.lsp.config('lua_ls', config)

Troubleshooting

Start with :checkhealth vim.lsp to troubleshoot. 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 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.

  2. 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.

  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 :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.

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 :checkhealth vim.lsp. Add this to your init.lua to enable verbose logging:

vim.lsp.log.set_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.

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

nvim-lspconfig (neovim/nvim-lspconfig)

Searching Database…

这是什么?nvim-lspconfig 是一组现成的 LSP 服务器配置,供 Neovim 内置的 LSP 客户端使用,这样你就不必为每个语言服务器手动编写设置。
这是插件还是完整的 LSP 客户端?它只是配置数据,既不是客户端,也不是语言服务器本身。实际工作由 Nvim 内置的 LSP 客户端完成,本仓库只提供各服务器的设置(命令、根目录标记、文件类型)。
我该如何让它运行起来?安装一个语言服务器(例如 pyright),在 init.lua 中使用 vim.lsp.enable('...') 启用其配置,然后在带有可识别根目录标记的项目中打开文件,Nvim 就会自动附加 LSP。
我需要特定版本的 Neovim 吗?需要。它要求 Nvim 0.11.3 或更高版本。旧的 require('lspconfig') API 已被弃用,取而代之的是 0.11 及以上版本引入的 vim.lsp.config 和 vim.lsp.enable;对 0.10 的支持即将停止。
它会为我安装语言服务器吗?不会。你必须自己安装每个语言服务器,并确保其命令位于 $PATH 中。nvim-lspconfig 只提供告诉 Nvim 如何启动并与其通信的配置。
它在 Linux、macOS 和 Windows 上的表现一样吗?一样。它是纯 Lua 配置,可以在 Neovim 本身支持的任何平台上运行。
服务器无法附加时该如何调试?先运行 :checkhealth vim.lsp,然后检查根目录标记和文件类型检测,并在 init.lua 中启用详细日志,再查看 :LspLog 的输出。
我可以覆盖或扩展服务器的默认配置吗?可以。使用 vim.lsp.config('name', {...}) 来扩展现有配置,或者在运行时路径(runtimepath)上放置 after/lsp/name.lua 文件,用你自己的设置覆盖默认值。
在哪里可以看到支持的服务器完整列表?在 Nvim 中运行 :help lspconfig-all,或浏览仓库中 configs.md 里记录的配置。
为什么 require('lspconfig').setup{} 被弃用了?Neovim 0.11 及以上版本已将这一功能合并到核心的 vim.lsp.config 和 vim.lsp.enable API 中,因此旧的 lua/lspconfig/ 模块正在逐步淘汰,转而使用 lsp/ 目录中的配置,由 vim.lsp.config 自动发现。
What are similar projects?neovim, ale, LunarVim, lazy.nvim, telescope.nvim, vimrc, NvChad, AstroNvim
Creator
neovim
Size
8.5 MB
Stars
14K
Age
6y
Commits · 90 Days