如何修复Nvim中Lsp与mason的Lua JSON错误
解决Neovim LSP在所有语言环境中持续报错的问题
一、定位错误根源
首先要明确错误的具体信息,执行以下命令获取详情:
- 打开报错文件,运行
:lua vim.diagnostic.open_float(),查看光标处完整错误信息,包括错误来源(LSP服务或诊断系统)。 - 执行
:LspInfo,检查当前激活的LSP服务,确认是否有异常全局服务在所有文件中启动。
二、针对性修复方案
1. 修正LSP服务配置
如果错误来自意外激活的全局LSP服务:
- 检查
nvim-lspconfig配置,避免全局启动LSP服务(如vim.cmd('LspStart <server>')),应通过setup配合文件类型自动激活。 - 限制LSP服务仅在对应文件类型启动,示例:
require('lspconfig').jsonls.setup({ filetypes = { 'json', 'jsonc' }, -- 仅在JSON类文件中激活 -- 其他配置项 })
2. 调整诊断显示规则
如果是诊断系统误报或需临时隐藏:
- 全局限制诊断级别,仅显示ERROR级别的提示:
vim.diagnostic.config({ virtual_text = { severity = { min = vim.diagnostic.severity.ERROR } } })
- 过滤特定错误代码(需先通过
vim.diagnostic.open_float()获取错误代码):
vim.diagnostic.config({ virtual_text = { filter = function(diagnostic) -- 替换为你要隐藏的错误代码 return diagnostic.code ~= "XXX" end } })
3. 排查插件冲突
若存在多个LSP相关插件(如nvim-lspconfig、null-ls、lsp-zero):
- 临时禁用非核心插件,仅保留
nvim-lspconfig,重启Neovim测试,逐步定位冲突插件。 - 确保不同插件的诊断设置未互相覆盖,例如避免
null-ls与原生LSP诊断重复启用。
4. 最小化配置测试
若以上方法无效,用最小配置排查问题:
- 备份当前LSP配置文件,创建临时
init.lua:
vim.cmd([[set number]]) local lspconfig = require('lspconfig') lspconfig.html.setup{} lspconfig.cssls.setup{} lspconfig.lua_ls.setup{}
- 启动Neovim,若不再报错,说明原配置存在问题,逐步添加原配置内容排查。
三、临时隐藏错误的快捷方法
- 禁用当前缓冲区诊断:
:lua vim.diagnostic.disable() - 全局禁用所有诊断(不推荐长期使用,会失去LSP的代码检查优势):
:lua vim.diagnostic.disable()(无参数时为全局生效)
内容的提问来源于stack exchange,提问作者Ziad Hossam
相关产品推荐
相关产品推荐

