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

Neovim 0.8.1更新后部分语言LSP光标悬停高亮autocmd失效

问题分析与解决方案

核心问题

  1. 判断条件逻辑错误:你当前以documentFormattingProvider(格式化能力)作为启用文档高亮的判断依据,但文档高亮功能依赖的是LSP的documentHighlightProvider(文档高亮能力)——这是两个完全独立的LSP能力。更新后部分LSP的这两个能力不再同时具备,导致自动命令绑定逻辑失效。
  2. 变量未定义问题:第二个实现中lsp_highlight_document函数未接收bufnr参数,却直接在函数内使用该变量,导致自动命令无法绑定到正确的缓冲区,这也是Python文件无高亮但手动执行有效的原因。

修复后的配置代码

1. 修正lsp_highlight_document函数

local function lsp_highlight_document(client, bufnr)
    -- 检查LSP是否支持文档高亮能力,而非格式化能力
    if client.server_capabilities.documentHighlightProvider then
        local lsp_highlight_group = vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
        -- 清除当前缓冲区该组下的旧自动命令
        vim.api.nvim_clear_autocmds({ buffer = bufnr, group = lsp_highlight_group })
        -- 创建光标悬停高亮命令
        vim.api.nvim_create_autocmd("CursorHold", {
            callback = vim.lsp.buf.document_highlight,
            buffer = bufnr,
            group = lsp_highlight_group,
            desc = "Document Highlight",
        })
        -- 创建光标移动清除高亮命令
        vim.api.nvim_create_autocmd("CursorMoved", {
            callback = vim.lsp.buf.clear_references,
            buffer = bufnr,
            group = lsp_highlight_group,
            desc = "Clear All the References",
        })
    end
end

2. 修正on_attach中的调用

options.on_attach = function(client, bufnr)
    if client.name == "tsserver" then
        client.server_capabilities.documentFormattingProvider = true
    end

    if client.name == "sumneko_lua" then
        client.server_capabilities.documentFormattingProvider = false
    end

    -- 传入bufnr参数
    lsp_highlight_document(client, bufnr)
    lsp_keymaps(bufnr)
end

各语言情况说明

  1. Svelte文件报错:
    报错提示textDocument/documentHighlight不被支持,说明更新后的svelte-language-server已移除该能力,或客户端未正确请求该能力。可以检查Svelte LSP的版本/配置,确认是否能重新启用;若确实不再支持,只能放弃该文件类型的高亮功能。
  2. Python文件无高亮:
    修复bufnr传递问题后,自动命令会正确绑定到Python缓冲区,pyright默认支持文档高亮能力,功能即可正常触发。
  3. Go/TypeScript/Dart正常:
    这些LSP同时具备格式化和高亮能力,之前的错误条件碰巧生效,修复后逻辑更准确,不会影响现有功能。

内容的提问来源于stack exchange,提问作者Sami Al-Subhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:20:28