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

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})

验证操作

  1. 重新同步所有插件(如执行:LazySync或:PackerSync)
  2. 重启Neovim
  3. 打开对应语言的文件,输入代码即可触发LSP提供的补全建议

内容的提问来源于stack exchange,提问作者Haroon Almadani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:34:55