使用mason.nvim+nvim-cmp+UltiSnips时Neovim LSP自动补全失效
一、核心修复:完善LSP服务初始化配置
你的lsp.lua仅初始化了lua_ls,但pylsp、clangd等其他需要的LSP未调用setup,也未传递cmp_nvim_lsp的能力配置——LSP服务未启动,自然无法提供补全。
修改lsp.lua,用批量初始化方式启动所有Mason安装的LSP:
-- lsp.lua require("mason").setup({ ui = { icons = { package_installed = "✓", package_pending = "➜", package_uninstalled = "✗" } } }) require("mason-lspconfig").setup({ ensure_installed = { "lua_ls", "clangd", "jsonls", -- 若需要LaTeX补全,取消下方注释 -- "ltex", -- "texlab", "pylsp", -- "pylyzer", "vimls" } }) local capabilities = require('cmp_nvim_lsp').default_capabilities() local lspconfig = require('lspconfig') -- 批量初始化所有Mason安装的LSP,自动传递补全能力 require("mason-lspconfig").setup_handlers { function(server_name) lspconfig[server_name].setup { capabilities = capabilities, } end, -- 单独配置lua_ls(可选,解决vim全局变量报错) ["lua_ls"] = function() lspconfig.lua_ls.setup { capabilities = capabilities, settings = { Lua = { diagnostics = { globals = {'vim'}, }, }, }, } end, }
如果需要LaTeX的LSP补全,取消texlab或ltex的注释,Mason会自动安装,上述批量配置也会自动启动服务。
二、调试定位方法
若修复后仍无响应,按以下步骤排查:
- 检查LSP运行状态:打开目标文件(如Python/LaTeX文件),执行
:LspInfo,查看对应LSP是否处于running状态。若显示not running,说明服务启动失败。 - 查看LSP日志:执行
:LspLog,搜索error关键词,定位启动失败原因(如依赖缺失、配置语法错误)。 - 验证cmp源状态:执行
:CmpStatus,确认nvim_lsp源处于active状态。若为inactive,说明cmp未正确关联LSP能力。 - 手动触发补全:编辑时按
<C-Space>手动触发补全,若能弹出LSP补全项,说明自动触发逻辑有问题,可检查cmp的completion.autocomplete配置(默认值为{ 'TextChanged', 'InsertEnter' })。 - 确认插件安装状态:执行
:PackerStatus,检查cmp-nvim-lsp、mason-lspconfig、nvim-lspconfig等核心插件是否为installed状态,缺失则执行:PackerSync重新安装。
内容的提问来源于stack exchange,提问作者CCandle
相关产品推荐
相关产品推荐

