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

闲置数月后Neovim的LSP Zero自动补全功能失效求助

问题:Neovim基于LSP Zero的自动补全(LSP)功能失效

数月未使用Neovim,此前正常工作的基于LSP Zero的自定义自动补全(LSP)功能现已失效。已尝试重新安装完整配置,但问题仍未解决。

相关配置

plugins.lua(Packer.nvim)

-- LSP Configuration
use({
    "VonHeikemen/lsp-zero.nvim",
    branch = "v1.x",
    requires = {
        -- LSP Support
        { "neovim/nvim-lspconfig" }, -- Required
        { "williamboman/mason.nvim" }, -- Optional
        { "williamboman/mason-lspconfig.nvim" }, -- Optional

        -- Autocompletion
        { "hrsh7th/nvim-cmp" }, -- Required
        { "hrsh7th/cmp-nvim-lsp" }, -- Required
        { "hrsh7th/cmp-buffer" }, -- Optional
        { "hrsh7th/cmp-path" }, -- Optional
        { "saadparwaiz1/cmp_luasnip" }, -- Optional
        { "hrsh7th/cmp-nvim-lua" }, -- Optional
        { "onsails/lspkind.nvim" },

        -- Snippets
        { "L3MON4D3/LuaSnip" }, -- Required
        { "rafamadriz/friendly-snippets" }, -- Optional
    },
})

completion.lua

local luasnip = require("luasnip")
local cmp = require("cmp")
local lspkind = require("lspkind")

cmp.setup({
    formatting = {
        format = lspkind.cmp_format({
            with_text = true, -- do not show text alongside icons
            maxwidth = 50, -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters)

            -- The function below will be called before any actual modifications from lspkind
            -- so that you can provide more controls on popup customization.
            before = function(entry, vim_item)
                return vim_item
            end,
        }),
    },

    snippet = {
        expand = function(args)
            require("luasnip").lsp_expand(args.body)
        end,
    },
    mapping = {
        ["<C-p>"] = cmp.mapping.select_prev_item(),
        ["<C-n>"] = cmp.mapping.select_next_item(),
        ["<C-d>"] = cmp.mapping.scroll_docs(-4),
        ["<C-f>"] = cmp.mapping.scroll_docs(4),
        ["<C-Space>"] = cmp.mapping.complete(),
        ["<C-e>"] = cmp.mapping.close(),
        ["<CR>"] = cmp.mapping.confirm({
            behavior = cmp.ConfirmBehavior.Replace,
            select = true,
        }),
        ["<Tab>"] = function(fallback)
            if cmp.visible() then
                cmp.select_next_item()
            elseif luasnip.expand_or_jumpable() then
                luasnip.expand_or_jump()
            else
                fallback()
            end
        end,
        ["<S-Tab>"] = function(fallback)
            if cmp.visible() then
                cmp.select_prev_item()
            elseif luasnip.jumpable(-1) then
                luasnip.jump(-1)
            else
                fallback()
            end
        end,
    },
    sources = {
        { name = "nvim_lsp" },
        { name = "luasnip" },
        { name = "neorg" },
    },
})

解决步骤
  1. 检查LSP服务状态

    • 启动Neovim后执行:LspInfo,确认目标语言的LSP服务器已启动。若未启动,执行:Mason检查服务器是否已安装,未安装则手动安装。
    • 若服务器已安装但启动失败,执行:LspLog查看日志,排查路径错误、依赖缺失等问题。
  2. 更新所有插件

    • 执行:PackerSync更新LSP Zero、nvim-cmp、lspconfig等核心插件,避免版本兼容性问题。更新后重启Neovim测试。
  3. 确认LSP与cmp的关联配置

    • 确保LSP的capabilities已集成cmp的补全能力,在LSP配置中添加:
      local lsp_zero = require('lsp-zero')
      lsp_zero.extend_lspconfig({
        capabilities = require('cmp_nvim_lsp').default_capabilities()
      })
      
    • 检查completion.lua中sources是否包含nvim_lsp,且cmp-nvim-lsp已正确引入。
  4. 排查Snippets配置

    • 执行:LuaSnipListAvailable查看是否有可用的snippets,若为空,在Luasnip配置中添加:
      require("luasnip.loaders.from_vscode").lazy_load()
      
    • 确认completion.lua中snippet.expand函数正确调用luasnip.lsp_expand。
  5. 测试最小配置

    • 创建极简配置文件,仅加载LSP Zero、nvim-cmp、对应LSP服务器,逐步添加原有配置项,定位是否存在插件冲突或无效配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:20:40