在 clangd 中使用 clang-format 时,要控制大括号的换行风格,你需要配置 .clang-format 文件。以下是常用的大括号换行配置选项:

1. 创建或修改 .clang-format 文件

在你的项目根目录或用户目录创建此文件:

# 基础风格(可选的预设)
BasedOnStyle: LLVM  # 或 Google, Chromium, Mozilla, WebKit 等

# 函数定义的大括号换行
BreakBeforeBraces: Custom  # 设置为Custom以便自定义控制

# 详细的括号换行配置
BraceWrapping:
  AfterClass: true      # 类定义后换行
  AfterControlStatement: true  # 控制语句后换行
  AfterEnum: true       # 枚举定义后换行
  AfterFunction: true   # 函数定义后换行
  AfterNamespace: true  # 命名空间后换行
  AfterObjCDeclaration: true
  AfterStruct: true     # 结构体定义后换行
  AfterUnion: true      # 联合定义后换行
  AfterExternBlock: true
  BeforeCatch: true
  BeforeElse: true
  BeforeLambdaBody: false
  BeforeWhile: false
  IndentBraces: false
  SplitEmptyFunction: true
  SplitEmptyRecord: true
  SplitEmptyNamespace: true

2. 推荐的配置(大括号全部换行)

BasedOnStyle: LLVM
BreakBeforeBraces: Allman
# 或使用自定义设置:
BraceWrapping:
  AfterClass: true
  AfterControlStatement: Always
  AfterEnum: true
  AfterFunction: true
  AfterNamespace: true
  AfterStruct: true
  AfterUnion: true
  AfterExternBlock: true

3. 针对不同情况的配置示例

示例 1:Allman 风格(大括号总是换行)

BasedOnStyle: LLVM
BreakBeforeBraces: Allman

示例 2:函数大括号换行,其他不换

BasedOnStyle: LLVM
BreakBeforeBraces: Custom
BraceWrapping:
  AfterFunction: true
  AfterClass: false
  AfterControlStatement: Never

4. 完整的配置示例

Language: Cpp
BasedOnStyle: LLVM
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignEscapedNewlines: Left
AlignOperands: true
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Custom
BraceWrapping:
  AfterClass: true
  AfterControlStatement: Always
  AfterEnum: true
  AfterFunction: true
  AfterNamespace: true
  AfterStruct: true
  AfterUnion: true
  AfterExternBlock: true
ColumnLimit: 120
IndentWidth: 4
UseTab: Never
TabWidth: 4
PointerAlignment: Left
SpaceAfterCStyleCast: false
IndentCaseLabels: true

5. 验证配置

  1. 安装 clang-format:
# Ubuntu/Debian
sudo apt-get install clang-format

# macOS
brew install clang-format

# 或通过 LLVM
  1. 测试格式化效果:
clang-format --style=file -i yourfile.cpp

6. 在 VSCode 中配置

.vscode/settings.json 中添加:

{
  "clangd.fallbackFlags": ["--query-driver=*"],
  "C_Cpp.formatting": "disabled",
  "[cpp]": {
    "editor.formatOnSave": true
  }
}

注意事项:

  1. .clang-format 文件应该放在项目根目录
  2. 可以在文件头部使用 # 注释配置项的含义
  3. 可以使用 clang-format -style=file -dump-config 查看当前配置
  4. BreakBeforeBraces 预设值有:Attach, Linux, Stroustrup, Allman, GNU, WebKit, Mozilla, Custom

选择适合你团队编码风格的配置即可。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐