windows 下 vs code 格式化代码(clang-format)

vscode 的格式化代码能力来源于插件(有不止一种插件提供格式化功能),而非 vscode 本身

这个可以通过卸载插件试出来,卸载到了某一个插件之后就无法格式化了,就是那个插件提供的格式化

一、安装插件

商店搜索 clang-format,第一个下载多的

windows 下 vs code 格式化代码(clang-format)_第1张图片

二、windows 下载 LLVM-17.0.1-win64.exe (win64.exe 结尾的安装包)

Releases · llvm/llvm-project · GitHub

可以直接把这个 exe 解压,里面有个 bin 目录,bin 目录有个 clang-format.exe (就要这个文件)

三、配置 clang-format.exe 路径

vscode——设置——拓展——clang-format

windows 下 vs code 格式化代码(clang-format)_第2张图片

如果不配置 clang-format.exe 路径,格式化代码就会报错

The 'clang-format' command is not available. Please check your clang-format.executable user setting and ensure it is installed.

四、格式化命令

格式化部分代码:选中部分代码,ctrl + k , ctrl + f

格式化所有代码:shift + alt + f  或者右键代码空白处,有个格式化代码选项

windows 下 vs code 格式化代码(clang-format)_第3张图片

五、设置默认格式化代码插件

右键代码空白位置,还是上图,有个 使用...格式化文档 ,点进去可以设置默认格式化的插件,如果你有多个格式化插件,点击配置默认格式化程序,然后请选择 Clang-Format,如果只有一个格式化插件,可忽略此步骤

windows 下 vs code 格式化代码(clang-format)_第4张图片

六、设置默认样式

设置——拓展——clang-format,这里可以选择一些别人定好的样式,比如:LLVM

如果不需要个性化设置,那么到这就结束了

七、个性化设置

格式化的个性化设置可以通过指定 .clang-format 文件位置来配置,设置右上角,点击红框处,打开设置的 json 文件 ( .clang-format  文件的优先级高于第六章的别人定好的样式)

然后追加一行 ( file: 不可以省略),后面接 .clang_format 文件的具体路径

"clang-format.style": "file:C:\\Users\\AA\\Documents\\clang-format\\.clang-format"
# 反斜杠也是可以的
# "clang-format.style": "file:C:/Users/AA/Documents/clang-format/.clang-format"

示例:

官方有提供 .clang_format 文档说明

Clang-Format Style Options — Clang 18.0.0git documentation

或者参考其他博主

clang-format 最全格式说明_.clang-format-CSDN博客

值得一提的是 .clang_format 这个文件应该是一种通用的格式,很多插件都支持配置这个文件的路径

八、关于 .clang_format

简单聊聊怎么看官方文档和 .clang_format 文件编写,首先 .clang_format 是一个 yaml 格式,比如

---
# We'll use defaults from the LLVM style, but with 4 columns indentation.
BasedOnStyle: LLVM
IndentWidth: 4
---
Language: Cpp
# Force pointers to the type for C++.
DerivePointerAlignment: false
PointerAlignment: Left
---
Language: JavaScript
# Use 100 columns for JS.
ColumnLimit: 100
---
Language: Proto
# Don't format .proto files.
DisableFormat: true
---
Language: CSharp
# Use 100 columns for C#.
ColumnLimit: 100

1、yaml

可以先看看 yaml 文件的基础知识,有点像 key: value 的结构

Yaml文件的基础知识 - 知乎

然后说说要注意的点 

①、yaml 大小写敏感,这个建议是复制官方文档的字段,不容易出错

②、冒号后面必须有个空格,然后别用中文冒号

BasedOnStyle: LLVM
# 下面这种是错的
BasedOnStyle:LLVM

③、--- 三个横杠用于分割块,块中的 key 值不能重复(插一句别的,上面示例中三个横杠分割了不同语言的格式化设置,第一个块应该是全局配置)

④、缩进敏感,类似 python,因为没有括号分隔,全靠缩进,所以别乱缩进

⑤、关于 value,几种常见值

#第一种 key: value
SpacesBeforeTrailingComments: 3
#第二种 key: key: value
AlignConsecutiveMacros:
  Enabled: true
  AcrossEmptyLines: true
  AcrossComments: false
#第三种 key: 数组
WhitespaceSensitiveMacros:
  - STRINGIZE
  - PP_STRINGIZE
  - BOOST_PP_STRINGIZE
  - NS_SWIFT_NAME
  - CF_SWIFT_NAME

2、查看官方文档

官方文档的格式名是按照字母排序的

Clang-Format Style Options — Clang 18.0.0git documentation

 ①、样例1,常规类型

红框代表 key 字段,绿框代码 value 的类型,像整型、布尔大家应该认识,最后那个 clang-format 3.3 是 clang-format.exe 的版本,如果下的最新版可无须关心

AccessModifierOffset: 2

 ②、样例2,枚举类型,也可以认为是一个字符串

windows 下 vs code 格式化代码(clang-format)_第5张图片

绿框里是一个自定义类型,可选的值为 in configuration 后面的红框里的值,别看成 BAS_Align 

AlignAfterOpenBracket: Align

③、样例3,复合类型

windows 下 vs code 格式化代码(clang-format)_第6张图片

这种就还是以文档内容为主,文章说提供了两种写法,一种是 key: value,一种是 key: key: value,以实际文档为主

# 方式一
AlignConsecutiveMacros: Consecutive
# 方式二
AlignConsecutiveMacros:
  Enabled: true

然后大家结合全文翻译就能自己写 .clang_format 文件了

九、我自己用的 .clang_format

其实下面 BasedOnStyle 里面就是一个大的格式集合,我们只需要找到我们不习惯的格式,单独拎出来改就行,不用每个格式都配置

---
BasedOnStyle: LLVM
IndentWidth: 4
---
Language: Cpp
 
# 列限制,超过这个列数才折行,这个值低的话很容易自动折行
ColumnLimit: 150
# 空行分割块,比如两个相邻的结构体,中间自动加个空行
SeparateDefinitionBlocks: Always
# 结构体数组阵列,右对齐,描述有点抽象,建议看官方文档
AlignArrayOfStructures: Right

我只配置了限制自动折行的列数,他们有个智能折行的操作,有时候没几列就折行了,我就调高一点这个列限制列数

然后就是分割块,有时候我们两个结构体离得很近,就中间自动插入一个空格,函数和函数之间也属于块的范畴,处理也是同理,我理解大括号里面的可能都叫做块

最后一个配置像这样

// 左对齐
struct test demo[] =
{
    {56, 23,    "hello"},
    {-1, 93463, "world"},
    {7,  5,     "!!"   }
};

// 右对齐
struct test demo[] =
{
    {56,    23, "hello"},
    {-1, 93463, "world"},
    { 7,     5,    "!!"}
};

你可能感兴趣的:(vscode,clang-format)