You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:16:00