• vscode中只有装置了C/C++扩大后,在C/C++源文件中右键就能看到格式化文档的选项,这样就能通过该选项或者其快捷键(Shift+Alt+F)来实现疾速格式化代码。
  • 装置了C/C++扩大同时会主动装置clang-format,通过配置.clang-format文件能够对代码格式化进行一些本人的设置。这样就能够依照本人的设置来进行一键格式化了。
  • 在vscode首选项中有一些相干设置。

    • C_Cpp: Clang_format_style 决定格式化模式,若为file,则调用在workspace中的.clang-format
    • C_Cpp: Clang_format_fallback Style ,若上一个选项设置为file,但无.clang-format文件则依照此处规定
  • 我是通过vscode的remote ssh近程登录到linux虚拟机上,我虚拟机中的clang-format在/root/.vscode-server/extensions/ms-vscode.cpptools-1.8.4/LLVM/bin文件夹中,所以cd到该目录下执行命令——./clang-format -style=LLVM -dump-config > .clang-format就能生成.clang-format文件。将该文件拷贝到本人我的项目中,而后依照本人的需要批改配置就能够了。
  • 其中.clang-format文件生成命令的格局是:

    // 格局名可选:LLVM, Google, Chromium, Mozilla, WebKit。clang-format -style=格局名 -dump-config > .clang-format
  • 以下是我自定义的格式化配置,仅供参考。

    ---# 语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProtoLanguage:        Cpp# BasedOnStyle:  LLVM# 拜访说明符(public、private等)的偏移AccessModifierOffset: -4# 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)AlignAfterOpenBracket: Align# 对齐数组列AlignArrayOfStructures: None# 对齐间断宏定义AlignConsecutiveMacros: None# 间断赋值时,对齐所有等号AlignConsecutiveAssignments: None# 对齐间断位字段AlignConsecutiveBitFields: None# 间断申明时,对齐所有申明的变量名AlignConsecutiveDeclarations: None# 左对齐逃脱换行(应用反斜杠换行)的反斜杠AlignEscapedNewlines: Left# 程度对齐二元和三元表达式的操作数AlignOperands:   Align# 对齐间断的尾随的正文AlignTrailingComments: true# 容许函数申明的所有参数在放在下一行AllowAllParametersOfDeclarationOnNextLine: true# 容许短的枚举放在同一行AllowShortEnumsOnASingleLine: true# 容许短的块放在同一行AllowShortBlocksOnASingleLine: Never# 容许短的case标签放在同一行AllowShortCaseLabelsOnASingleLine: false# 容许短的函数放在同一行AllowShortFunctionsOnASingleLine: All# 容许短的匿名函数放在同一行AllowShortLambdasOnASingleLine: All# 容许短的if语句放弃在同一行AllowShortIfStatementsOnASingleLine: Never# 容许短的循环放弃在同一行AllowShortLoopsOnASingleLine: false# 总是在返回类型后换行AlwaysBreakAfterReturnType: None# 总是在多行string字面量前换行AlwaysBreakBeforeMultilineStrings: false# 总是在template申明后换行AlwaysBreakTemplateDeclarations: MultiLineAttributeMacros:- __capability# false示意函数实参要么都在同一行,要么都各自一行BinPackArguments: true# false示意所有形参要么都在同一行,要么都各自一行BinPackParameters: true# 大括号换行,只有当BreakBeforeBraces设置为Custom时才无效BraceWrapping:AfterCaseLabel:  falseAfterClass:      falseAfterControlStatement: NeverAfterEnum:       falseAfterFunction:   falseAfterNamespace:  falseAfterObjCDeclaration: falseAfterStruct:     falseAfterUnion:      falseAfterExternBlock: falseBeforeCatch:     falseBeforeElse:      falseBeforeLambdaBody: falseBeforeWhile:     falseIndentBraces:    falseSplitEmptyFunction: trueSplitEmptyRecord: trueSplitEmptyNamespace: true# 在二元运算符前换行BreakBeforeBinaryOperators: None# 在concept前换行BreakBeforeConceptDeclarations: true# 在大括号前换行: Attach(始终将大括号附加到四周的上下文)BreakBeforeBraces: Attach# 继承列表款式BreakInheritanceList: AfterComma# 在三元运算符前换行BreakBeforeTernaryOperators: true# 构造函数初始值设定项换行款式BreakConstructorInitializers: BeforeComma# 在java字段的正文后换行BreakAfterJavaFieldAnnotations: false# 每行字符的限度,0示意没有限度ColumnLimit:     80# 形容具备非凡意义的正文的正则表达式,它不应该被宰割为多行或以其它形式扭转CommentPragmas:  '^ IWYU pragma:'# 在新行上申明每个命名空间CompactNamespaces: false# 构造函数的初始化列表的缩进宽度ConstructorInitializerIndentWidth: 4# 连续的行的缩进宽度ContinuationIndentWidth: 4# 去除C++11的列表初始化的大括号{后和}前的空格Cpp11BracedListStyle: true# 继承最罕用的换行形式DeriveLineEnding: true# 继承最罕用的指针和援用的对齐形式DerivePointerAlignment: false# 敞开格式化DisableFormat:   false# 删除拜访修饰符后的所有空行EmptyLineAfterAccessModifier: Never# 仅当拜访修饰符开始一个新的逻辑块时才增加空行EmptyLineBeforeAccessModifier: LogicalBlock# 自动检测函数的调用和定义是否被格局为每行一个参数(Experimental)ExperimentalAutoDetectBinPacking: false# 主动补充namespace正文FixNamespaceComments: true# 须要被解读为foreach循环而不是函数调用的宏ForEachMacros:- foreach- Q_FOREACH- BOOST_FOREACHIfMacros:- KJ_IF_MAYBE# 多个#include块合并在一起并排序为一个IncludeBlocks:   Merge# 能够定义正数优先级从而保障某些#include永远在最后面IncludeCategories:- Regex:           '^"(llvm|llvm-c|clang|clang-c)/'  Priority:        2  SortPriority:    0  CaseSensitive:   false- Regex:           '^(<|"(gtest|gmock|isl|json)/)'  Priority:        3  SortPriority:    0  CaseSensitive:   false- Regex:           '.*'  Priority:        1  SortPriority:    0  CaseSensitive:   falseIncludeIsMainRegex: '(Test)?$'IncludeIsMainSourceRegex: ''# 缩进拜访修饰符IndentAccessModifiers: false# 缩进case标签IndentCaseLabels: false# case 标签前面的块应用与 case 标签雷同的缩进级别IndentCaseBlocks: false# 缩进goto标签。IndentGotoLabels: false# 缩进预处理器指令IndentPPDirectives: None# 向后兼容缩进内部块IndentExternBlock: AfterExternBlock# 缩进模板中的requires子句IndentRequires:  false# 缩进宽度IndentWidth:     4# 函数返回类型换行时,缩进函数申明或函数定义的函数名IndentWrappedFunctionNames: false# 插入尾随逗号InsertTrailingCommas: None# 保留JavaScript字符串引号JavaScriptQuotes: Leave# 包装 JavaScript 导入/导出语句JavaScriptWrapImports: true# 保留在块开始处的空行KeepEmptyLinesAtTheStartOfBlocks: true# 绝对于 lambda 签名对齐 lambda 主体LambdaBodyIndentation: Signature# 开始一个块的宏的正则表达式MacroBlockBegin: ''# 完结一个块的宏的正则表达式MacroBlockEnd:   ''# 间断空行的最大数量MaxEmptyLinesToKeep: 1# 命名空间的缩进NamespaceIndentation: InnerObjCBinPackProtocolList: Auto# 应用ObjC块时缩进宽度ObjCBlockIndentWidth: 4ObjCBreakBeforeNestedBlockParam: true# 在ObjC的@property后增加一个空格ObjCSpaceAfterProperty: false# 在ObjC的protocol列表前增加一个空格ObjCSpaceBeforeProtocolList: truePenaltyBreakAssignment: 2PenaltyBreakBeforeFirstCallParameter: 19PenaltyBreakComment: 300PenaltyBreakFirstLessLess: 120PenaltyBreakString: 1000PenaltyBreakTemplateDeclaration: 10PenaltyExcessCharacter: 1000000PenaltyReturnTypeOnItsOwnLine: 60PenaltyIndentedWhitespace: 0# 指针的对齐: Left, Right, MiddlePointerAlignment: Left# 缩进预处理器语句的列数PPIndentWidth:   -1# 援用的对齐ReferenceAlignment: Pointer# 容许从新排版正文ReflowComments:  true# 短命名空间逾越的最大开展行数ShortNamespaceLines: 1# 容许排序#includeSortIncludes:    CaseSensitive# java动态导入放在非动态导入之前SortJavaStaticImport: Before# 对using申明排序SortUsingDeclarations: true# 在C格调类型转换后增加空格SpaceAfterCStyleCast: false# 在!后增加空格SpaceAfterLogicalNot: false# 在Template关键字后增加空格SpaceAfterTemplateKeyword: true# 在赋值运算符之前增加空格SpaceBeforeAssignmentOperators: true# 不在case冒号之前增加空格SpaceBeforeCaseColon: false# 不在C++11大括号列表之前增加空格SpaceBeforeCpp11BracedList: false# 在构造函数初始化器冒号之前增加空格SpaceBeforeCtorInitializerColon: true# 在继承冒号前增加空格SpaceBeforeInheritanceColon: true# 开圆括号之前增加一个空格: Never, ControlStatements, AlwaysSpaceBeforeParens: ControlStatements# 不要确保指针限定符四周有空格,而是应用 PointerAlignmentSpaceAroundPointerQualifiers: Default# 在基于范畴的for循环冒号之前增加空格SpaceBeforeRangeBasedForLoopColon: true# {}两头不增加空格SpaceInEmptyBlock: false# 在空的圆括号中增加空格SpaceInEmptyParentheses: false# 在尾随的评论前增加的空格数(只实用于//)SpacesBeforeTrailingComments: 1# 在尖括号的<后和>前增加空格SpacesInAngles:  Never# 不在if/for/switch/while条件四周插入空格SpacesInConditionalStatement: false# 在容器(ObjC和JavaScript的数组和字典等)字面量中增加空格SpacesInContainerLiterals: true# 在C格调类型转换的括号中增加空格SpacesInCStyleCastParentheses: false# 行正文结尾容许有多少个空格。要禁用最大值,请将其设置为-1,除此之外,最大值优先于最小值SpacesInLineCommentPrefix:Minimum:         1Maximum:         -1# 在圆括号的(后和)前增加空格SpacesInParentheses: false# 在方括号的[后和]前增加空格,lamda表达式和未指明大小的数组的申明不受影响SpacesInSquareBrackets: false# 不在[前增加空格SpaceBeforeSquareBrackets: false# 位域:每边都增加空格BitFieldColonSpacing: Both# 规范Standard:        Auto# 在语句后面被疏忽的宏定义,就如同它们是一个属性一样StatementAttributeLikeMacros:- Q_EMIT# 应该被解释为残缺语句的宏定义StatementMacros:- Q_UNUSED- QT_REQUIRE_VERSION# tab宽度TabWidth:        4# 应用\n换行UseCRLF:         false# 应用tab字符:ForIndentation——仅将制表符用于缩进UseTab:          ForIndentation# 对空格敏感的宏定义WhitespaceSensitiveMacros:- STRINGIZE- PP_STRINGIZE- BOOST_PP_STRINGIZE- NS_SWIFT_NAME- CF_SWIFT_NAME...