如何关闭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 insertionnvim-cmp filter additionalTextEditslsp-zero clangd configuration
内容的提问来源于stack exchange,提问作者mmazz
相关产品推荐
相关产品推荐

