VSCode中clangd格式化自动排序头文件,如何修复该问题?
解决clangd自动按字母顺序排序头文件包含的问题
VSCode中的clangd插件会自动将.h头文件的包含顺序修改为字母顺序,示例如下:
格式化前:
#include "c.h" #include "b.h" #include "a.h"
格式化后:
#include "a.h" #include "b.h" #include "c.h"
当前使用的clangd配置:
{ "clangd.onConfigChanged": "restart", "clangd.arguments": [ "--clang-tidy", "--clang-tidy-checks=performance-*,bugprone-*", "--compile-commands-dir=${workspaceFolder}/.vscode/", "--background-index", "--completion-style=detailed", "--enable-config", "--fallback-style=Mozilla", "--function-arg-placeholders=false", "--all-scopes-completion", "--header-insertion-decorators", "--header-insertion=iwyu", "--log=verbose", "--pch-storage=memory", "--pretty", "--ranking-model=decision_forest", "--cross-file-rename", "-j=16" ], "clangd.checkUpdates": false }
问题原因
配置中的--fallback-style=Mozilla是核心诱因:Mozilla预定义代码风格包含自动对头文件包含进行字母序排序的规则,clangd会遵循该规则调整头文件顺序。
解决方案
方法1:自定义.clang-format配置(推荐)
由于你已经开启了--enable-config,clangd会优先读取项目根目录下的.clang-format文件。在项目根目录创建该文件,添加以下内容:
# 禁用头文件自动排序 IncludeSorting: Never
添加后clangd会使用该自定义规则,不再修改头文件包含顺序。
方法2:修改clangd启动参数
直接调整clangd.arguments中的参数:
- 选项A:替换
--fallback-style=Mozilla为不包含头文件排序的预定义风格,例如:"--fallback-style=WebKit" - 选项B:直接通过参数指定禁用排序,在
clangd.arguments中添加:
注意该参数需要放在"--clang-format-style={IncludeSorting: Never}"--fallback-style之后,确保优先级更高。
内容的提问来源于stack exchange,提问作者lyt626
相关产品推荐
相关产品推荐

