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"事件 |
迁移步骤与示例
更新Neovim和插件: 确保你的 Neovim 版本在 0.11.0 或以上,因为新的 vim.lsp.config API 是从这个版本开始引入的。同时,将你的 nvim-lspconfig 插件更新到最新版本。
重写配置语法:找到你配置文件中所有使用 require(’lspconfig’).XX.setup({…}) 的地方,将其改为新的格式。
迁移实例:
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')
|
- 处理全局设置(如按键映射) : 在新的模式中,建议将通用的、不针对特定语言服务器的设置(如按键映射)通过全局的 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)来排查错误。