打开设置找到 “C_Cpp: Clang_format_style” 这项,填入以下代码:
{ BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Linux, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }
这样就可以在原来的基础上,修改为函数的左大括号前换行,其他不换行。
下面是使用效果
以下是大概原理
格式化工具
安装了 “C/C++” 拓展后,VSCode会调用 " clang-format.exe " 来格式化代码,这个程序是 LLVM 项目提供的工具。所以设置格式化代码要通过设置这个软件的运行参数来实现。除了 “C_Cpp: Clang_format_style” 还有一项相关的设置项,叫"C_Cpp: Clang_format_fallback Style"。在前一个设置项出错时会应用后一个设置项。
设置中有叫 " C_Cpp › Vc Format › New Line" 的,之前我尝试修改相关的设置项,但并没有起作用。" Vc Format" 和 “Clang_format” 的关系我还没搞清楚,只知道要修改后者才能起作用。
Clang_format设置
在VSCode的设置项中有相关说明,可用参数可以分为三类:
-
用 ".clang-format" 文件指定样式,文件在当前目录或者父目录都可以
-
用几个默认样式
-
用参数指定样式
默认设置是先用文件指定,找不到文件后用 “Visual Studio” 样式,在说明中给出了该样式的参数。至于参数怎么设置,可以参考官网的文档,也可以参考简书上的这篇翻译文章。本文只说几点关键内容,详细内容自行查阅文档。
“.clang-format” 文件
该文件使用 YAML 格式,可以自己在文本文档中编写参数,再重命名。将重命名好的文件放到工作目录或者父目录就可以应用参数。
也可以生成完整参数的文件,自己再按需修改。找到 “clang-format.exe” 的路径,在系统环境变量的Path中添加该路径。之后用PowerShell运行以下代码:
clang-format -style=llvm -dump-config > .clang-format
生成的文件在 " C:\Windows\System32" 或者在用户文件夹。找不到程序或者生成文件的话,推荐用Everything搜索。
配置多语言
使用Language:参数来设置语言,文档中有支持的语言,以及怎么修改后缀对应的语言,本文不赘述。在Language:参数前面的参数会应用于所有语言,Language:参数后面的的参数会应用于相应语言,并覆盖前面的参数。所以可以通过设置这个参数,实现单独设置某个语言的样式。
基础样式
使用BasedOnStyle:参数来设置基础样式,可选样式请查阅文档。设置这个参数后就可以按照对应的样式来格式化代码,添加其他参数后,会覆盖这个样式的对应参数设置。从VSCode的说明中可以看到,“Visual Studio” 样式的基础样式是LLVM,之后是几个调整参数。在那几个参数中,有BreakBeforeBraces:这个参数,这个就是用来控制大括号换行的。
大括号的相关设置
使用BreakBeforeBraces:参数来设置大括号换行。可用字段可以分为三类:
-
大括号前不换行,以及衍生版本(在某些情况下换行)
-
大括号前换行,以及衍生版本(在某些情况下不换行)
-
自己定制
将参数设置为Linux即可实现函数的大括号换行,其他情况不换行。需要其他换行方式的话,请查阅文档。如果默认的几种方式不能满足需求的话,可以设置为BS_Custom,然后在设置BraceWrapping参数,具体设置方法请查阅文档。