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

如何在Neovim的nvim-lspconfig+nvim-cmp中过滤自动补全文本片段

过滤nvim-cmp自动补全菜单中的文本片段

你可以通过以下几种方式过滤nvim-cmp补全菜单中的文本片段(snippet类条目):

全局过滤所有补全条目

在nvim-cmp的配置中添加全局过滤规则,直接剔除所有snippet类型的补全项:

require('cmp').setup({
  -- 保留你的其他配置(比如mapping、sources等)
  filtering = {
    enabled = true,
    entries = {
      filter = function(entry, ctx)
        -- LSP规范中,completionItemKind.Snippet对应数值15,过滤该类型条目
        return entry:get_kind() ~= 15
      end
    }
  }
})

禁用特定LSP服务器的snippet支持

如果只想让某个LSP不返回snippet补全,可以修改该服务器的capabilities,关闭snippet支持:

-- 先获取默认capabilities
local capabilities = require('cmp_nvim_lsp').default_capabilities()
-- 禁用snippet支持,LSP将不再返回snippet类型的补全项
capabilities.textDocument.completion.completionItem.snippetSupport = false

-- 以pyright为例,应用修改后的capabilities
require('lspconfig').pyright.setup({
  capabilities = capabilities,
  -- 你的其他LSP配置
})

针对单个nvim-cmp source过滤

如果只想过滤某个cmp source(比如nvim_lsp)下的snippet,可给该source单独设置过滤规则:

require('cmp').setup({
  sources = {
    {
      name = 'nvim_lsp',
      entry_filter = function(entry, ctx)
        -- 仅过滤该source下的snippet条目
        return entry:get_kind() ~= 15
      end
    },
    -- 其他source配置(比如buffer、path等)
  }
})

补充说明

如果不确定目标条目的kind值,可以在补全菜单弹出时,执行以下命令查看当前激活条目的kind数值:

:lua print(vim.inspect(require('cmp').get_active_entry():get_kind()))

LSP规范中,completionItemKind的枚举值里,Snippet类型对应的数值为15。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:18:29