Neovim中的lspconfig升级修复

2025-09-26 15:16 在更新ArchLinux后,再打开Neovim后提示

1
2
The `require('lspconfig')` "framework" is deprecated, use vim.lsp.config (see :help lspconfig-nvim-0.11) instead.
Feature will be removed in nvim-lspconfig v3.0.0

问题解读

你遇到的这个提示意味着你正在使用的 nvim-lspconfig 插件版本已经弃用了旧的配置方式,需要迁移到新的 Neovim 内置接口。新旧语法对照如下:

配置方面 旧语法(己弃用) 新语法(Neovim 0.11+)
基本服务器配置 require('lspconfig').pyright.setup({...}) vim.lsp.config('pyright',{...})
启用服务器 在setup后自动或通过其他机制 调用vim.lsp.enable('server_name')
通用配置(如按键映射) 在单个服务器的setup的on_attach中定义 使用vim.api.nvim_create_autocmd监听"LspAttach"事件

迁移步骤与示例

  1. 更新Neovim和插件: 确保你的 Neovim 版本在 0.11.0 或以上,因为新的 vim.lsp.config API 是从这个版本开始引入的。同时,将你的 nvim-lspconfig 插件更新到最新版本。

  2. 重写配置语法:找到你配置文件中所有使用 require('lspconfig').XX.setup({...}) 的地方,将其改为新的格式。

  3. 迁移实例:

旧配置示例
1
2
3
4
5
6
7
8
9
10
11
12
13
-- 这是已弃用的旧写法
require('lspconfig').pyright.setup({
settings = {
python = {
analysis = {
typeCheckingMode = "strict"
}
}
},
on_attach = function(client, bufnr)
-- 一些按键映射...
end
})
新配置示例
1
2
3
4
5
6
7
8
9
10
11
12
-- 使用新的 API 进行配置
vim.lsp.config('pyright', {
settings = {
python = {
analysis = {
typeCheckingMode = "strict"
}
}
}
})
-- 启用这个服务器
vim.lsp.enable('pyright')
  1. 处理全局设置(如按键映射) : 在新的模式中,建议将通用的、不针对特定语言服务器的设置(如按键映射)通过全局的 LspAttach 自动命令来设置。这可以避免为每个服务器重复编写 on_attach 函数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 定义一个通用的附加回调函数
local my_on_attach = function(client, bufnr)
-- 在这里设置你的按键映射等通用配置
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, { buffer = bufnr, desc = 'Goto Definition' })
vim.keymap.set('n', 'K', vim.lsp.buf.hover, { buffer = bufnr, desc = 'Hover Documentation' })
-- ... 其他映射
end

-- 使用自动命令在LSP客户端附加到缓冲区时应用这个函数
vim.api.nvim_create_autocmd("LspAttach", {
callback = function(args)
local client = vim.lsp.get_client_by_id(args.data.client_id)
local bufnr = args.buf
my_on_attach(client, bufnr)
end
})

验证与排查

完成修改后,你可以通过以下方式验证配置是否正确:

  • 重新加载你的配置文件(例如执行 :source $MYVIMRC)。

  • 打开一个相关类型的文件(如 .lua 文件),使用 :LspInfo 命令查看对应的语言服务器(如 lua_ls)是否正常启动。

  • 如果服务器没有启动,检查 Neovim 的 :messages 或 LSP 日志(通过 :LspLog)来排查错误。