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
相关产品推荐
相关产品推荐

