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

如何关闭Nvim中lsp-zero+clangd自动补全时的自动添加头文件功能?

解决C++自动补全时自动添加头文件的问题

你的问题核心是clangd(你使用的C++ LSP服务)在自动补全时会附带插入头文件的操作,以下是几种直接的解决方案:

1. 直接禁用clangd的自动头文件插入功能

在你的lsp-zero配置中添加clangd的专属配置,通过设置headerInsertion为Never彻底关闭自动加头文件的行为:

lsp.configure('clangd', {
  settings = {
    clangd = {
      headerInsertion = "Never",
      -- 如果上面的配置不生效,可以改用命令行参数的方式:
      -- cmd = {
      --   "clangd",
      --   "-header-insertion=never",
      -- }
    }
  }
})

这个配置会让clangd只提供符号补全,不会自动生成任何头文件插入的操作。

2. 过滤nvim-cmp中会修改头文件的补全项

如果你还想保留clangd的符号补全,但只想过滤掉那些会触发头文件插入的补全条目,可以在nvim-cmp的配置中添加过滤逻辑,检查补全项是否包含额外的文本编辑(比如插入头文件):

lsp.setup_nvim_cmp({
  mapping = cmp_mappings,
  sources = cmp.config.sources({
    { 
      name = 'nvim_lsp', 
      entry_filter = function(entry)
        -- 过滤掉带有额外文本编辑(如插入头文件)的补全项
        return not entry:get_completion_item().additionalTextEdits
      end
    },
    { name = 'buffer' },
  })
})

如果只需要当前文件内的单词补全,甚至可以直接只保留buffer源,完全关闭LSP提供的符号补全:

lsp.setup_nvim_cmp({
  mapping = cmp_mappings,
  sources = {
    { name = 'buffer' },
  }
})

3. 相关关键词提示

如果需要进一步搜索调试,可以用这些关键词:

  • clangd disable header insertion
  • nvim-cmp filter additionalTextEdits
  • lsp-zero clangd configuration

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:58:23