NVIM Cmp与LSP自动补全失效求助(搭配mason.nvim)
问题定位与修复方案
1. 修复拼写错误
你的LSP配置中,ts_ls的setup参数存在拼写错误:on_attack应改为on_attach。这个错误会导致TypeScript的LSP未绑定正确的回调逻辑,无法正常推送补全内容。
修正后的代码:
require("lspconfig").ts_ls.setup({on_attach = on_attach})
2. 补充关键依赖cmp-nvim-lsp
你的nvim-cmp配置缺少hrsh7th/cmp-nvim-lsp插件,该插件是nvim-cmp与LSP服务之间的核心桥梁,没有它,cmp无法接收LSP返回的补全数据。
需要在cmp的依赖列表中添加该插件:
return { "hrsh7th/nvim-cmp", event = "InsertEnter", dependencies = { "hrsh7th/cmp-buffer", "hrsh7th/cmp-path", "hrsh7th/cmp-nvim-lsp", -- 新增此依赖 "L3MON4D3/LuaSnip", "saadparwaiz1/cmp_luasnip", "rafamadriz/friendly-snippets", }, -- 其余配置保持不变 }
3. 注入LSP的capabilities配置
需要将nvim-cmp的capabilities注入到每个LSP的配置中,让LSP服务知晓客户端支持cmp的补全格式。
修改你的LSP配置文件,添加capabilities相关代码:
-- 引入cmp提供的默认capabilities local capabilities = require('cmp_nvim_lsp').default_capabilities() local on_attach = function(_,_) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, {}) vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, {}) vim.keymap.set('n', 'K', vim.lsp.buf.hover, {}) vim.keymap.set('n', 'gr', vim.lsp.buf.references, {}) end -- 为每个LSP配置传入capabilities require("lspconfig").lua_ls.setup({ on_attach = on_attach, capabilities = capabilities, -- 添加此行 settings = {Lua = {completion = {callSnippet ="Replace", enable=true,}}} }) require("lspconfig").ts_ls.setup({on_attach = on_attach, capabilities = capabilities}) require("lspconfig").clangd.setup({on_attach = on_attach, capabilities = capabilities}) require("lspconfig").omnisharp.setup({on_attach = on_attach, capabilities = capabilities})
验证操作
- 重新同步所有插件(如执行
:LazySync或:PackerSync) - 重启Neovim
- 打开对应语言的文件,输入代码即可触发LSP提供的补全建议
内容的提问来源于stack exchange,提问作者Haroon Almadani
相关产品推荐
相关产品推荐

