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

Neovim安装noice后光标移至诊断行重复执行echom致性能问题求解决方案

解决方案

1. 定位触发echom a:message的来源

先明确到底是哪个插件或Neovim逻辑在调用该命令,可通过覆盖echom来记录调用栈:

function! EchoMWrapper(msg)
  echom a:msg
  call writefile([a:msg, '---', traceback()], '/tmp/echom_trace.log', 'a')
endfunction
command! -nargs=+ Echom call EchoMWrapper(<q-args>)
cnoreabbrev echom Echom

执行上述代码后,移动光标到诊断行,查看/tmp/echom_trace.log文件,里面的调用栈会直接显示触发源。

2. 针对性屏蔽或修复

情况一:触发源是LSP诊断消息

如果是LSP在光标移动时输出诊断内容,可在noice配置中添加路由规则过滤对应消息:

require("noice").setup({
  routes = {
    {
      filter = {
        event = "msg_show",
        find = "替换为你实际看到的a:message内容", -- 比如诊断的具体文本片段
      },
      opts = { skip = true }, -- 跳过显示该消息
    },
  },
})

情况二:触发源是其他LSP辅助插件

若为lspsaga、nvim-diagnostic这类插件的自动诊断提示,直接在对应插件配置中关闭自动显示功能,或调整触发时机。

情况三:noice自身重复捕获消息

如果是noice对echom消息的重复处理,可调整noice的消息捕获配置:

require("noice").setup({
  messages = {
    enabled = false, -- 关闭全局消息捕获,仅保留cmdline等核心功能
    -- 也可精细过滤:
    -- view = "mini",
    -- view_error = "mini",
  },
})

3. 优化LSP诊断配置(补充)

你之前的on_attach设置了全局LSP handler,建议改为针对当前buffer配置,避免全局影响:

local custom_attach = function(_, bufnr)
  -- 针对当前buffer配置诊断行为
  vim.diagnostic.config({
    virtual_text = false,
    signs = true,
    update_in_insert = false,
  }, bufnr)

  -- 其他LSP绑定逻辑...
end

nvim_lsp['gopls'].setup{
    on_attach = custom_attach,
    flags = {
      debounce_text_changes = 150,
    },
    settings = {gopls = {
      buildFlags =  {"-tags=js,wasm"}
    }}
}

内容的提问来源于stack exchange,提问作者krile

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:24:52