enable clang-format in VSC

之前的环境都是好用的,一次深度垃圾清理后,发现所有配置和clang-format都不好用了。

clang-format要起作用:

  1. 装clang-format插件
  2. 装clang-format.exe,这个需要安装LLVM或者 cpptools插件
  3. 正确的配置文件

安装

  1. 安装clang-format 插件。xaver出品那个
  2. 配置Clang-format: Executable 有效路径。

配置

网上配置很多,只列举几个比较重要的:

配置vsc用的格式化工具为clang-foramt

  • Default Formatter(editor.defaultFormatter)

clang-format.exe路径配置

Clang-format:Executable(clang-format.executable)

保存文件自动格式化文件

  • format on save(editor.formatOnSave):yes
  • Format On Save Mode:file(默认)

格式的控制文件

方式1: 填写file。表示在项目根目录下搜索.clang-format
方式2: 修改VSC的Clang_format_style属性,直接填入键值对,也就是.clang-format的有效内容,这样就相当于全局配置文件了:

BasedOnStyle: LLVM
BreakBeforeBraces: Linux
Language: Cpp
ColumnLimit: 120
ReflowComments: false
SortIncludes: false
BreakBeforeBraces: Custom
BraceWrapping:
  AfterEnum: false
  AfterStruct: false
  SplitEmptyFunction: false
AlignConsecutiveAssignments: true
AlignConsecutiveMacros: true
AllowShortFunctionsOnASingleLine: None

clang-format 参考配置

贴一份在用的参考配置,欢迎大家讨论

BasedOnStyle: LLVM
Language: Cpp
ColumnLimit: 200
# 允许对注释排版
ReflowComments: false
# 允许修改头文件顺序
SortIncludes: false

#括号风格
BreakBeforeBraces: Custom
BraceWrapping:
  AfterFunction: true
  AfterEnum: false
  AfterStruct: false
  SplitEmptyFunction: false # 空函数,括号可以同行

# 注释左对齐
AlignTrailingComments: true
# 单行函数也要换行
AllowShortFunctionsOnASingleLine: false
## 是否允许短if语句单行
AllowShortIfStatementsOnASingleLine: true
# 单行循环可以单行,比如while1 和空for等
AllowShortLoopsOnASingleLine: true
# 自动换行后,二元运算符总在前
BreakBeforeBinaryOperators: true
# 缩进宽度
IndentWidth: 4
# 连续声明时,对齐所有声明的变量名
AlignConsecutiveDeclarations:   true
# 针和引用的对齐: Left, Right, Middle
PointerAlignment:   Left
# 在C风格类型转换后添加空格
SpaceAfterCStyleCast:   false
# 在赋值运算符之前添加空格
SpaceBeforeAssignmentOperators: true
# 开圆括号之前添加一个空格: Never, ControlStatements, Always
SpaceBeforeParens:  ControlStatements
# 在空的圆括号中添加空格
SpaceInEmptyParentheses:    false
# 在尾随的评论前添加的空格数(只适用于//)
SpacesBeforeTrailingComments:   2
# 在尖括号的<后和>前添加空格
SpacesInAngles: true
# 宏赋值对齐
AlignConsecutiveMacros: true

VSC中clang-format设置函数括号风格

目前发现一个问题在通过clang-format保存自动格式化时,函数的括号风格老是变化,一会是后置风格,一会是另起一行,如下所示:
风格1:

void fun(void){

}

风格2:

void fun(void)
{

}

本人想统一为风格1,无耐在VSC的UI里面各种参数尝试无果,于是找到官网:

ClangFormatStyleOptions

找到相关的设置:

BraceWrapping (BraceWrappingFlags)
Control of individual brace wrapping cases.

If BreakBeforeBraces is set to BS_Custom, use this to specify how each individual brace case should be handled. Otherwise, this is ignored.

# Example of usage:
BreakBeforeBraces: Custom
BraceWrapping:
  AfterEnum: true
  AfterStruct: false
  SplitEmptyFunction: false
  afterFunction: true

其中设置函数后括号风格的:

bool AfterFunction Wrap function definitions.

true:
void foo()
{
  bar();
  bar2();
}

false:
void foo() {
  bar();
  bar2();
}

将以上的配置添加到.clang-format 文件中,放到VSC工程的根目录下,才能生效