- 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, TextProto Language: 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: MultiLine AttributeMacros: - __capability # false 示意函数实参要么都在同一行,要么都各自一行 BinPackArguments: true # false 示意所有形参要么都在同一行,要么都各自一行 BinPackParameters: true # 大括号换行,只有当 BreakBeforeBraces 设置为 Custom 时才无效 BraceWrapping: AfterCaseLabel: false AfterClass: false AfterControlStatement: Never AfterEnum: false AfterFunction: false AfterNamespace: false AfterObjCDeclaration: false AfterStruct: false AfterUnion: false AfterExternBlock: false BeforeCatch: false BeforeElse: false BeforeLambdaBody: false BeforeWhile: false IndentBraces: false SplitEmptyFunction: true SplitEmptyRecord: true SplitEmptyNamespace: 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_FOREACH IfMacros: - 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: false IncludeIsMainRegex: '(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: Inner ObjCBinPackProtocolList: Auto # 应用 ObjC 块时缩进宽度 ObjCBlockIndentWidth: 4 ObjCBreakBeforeNestedBlockParam: true # 在 ObjC 的 @property 后增加一个空格 ObjCSpaceAfterProperty: false # 在 ObjC 的 protocol 列表前增加一个空格 ObjCSpaceBeforeProtocolList: true PenaltyBreakAssignment: 2 PenaltyBreakBeforeFirstCallParameter: 19 PenaltyBreakComment: 300 PenaltyBreakFirstLessLess: 120 PenaltyBreakString: 1000 PenaltyBreakTemplateDeclaration: 10 PenaltyExcessCharacter: 1000000 PenaltyReturnTypeOnItsOwnLine: 60 PenaltyIndentedWhitespace: 0 # 指针的对齐: Left, Right, Middle PointerAlignment: Left # 缩进预处理器语句的列数 PPIndentWidth: -1 # 援用的对齐 ReferenceAlignment: Pointer # 容许从新排版正文 ReflowComments: true # 短命名空间逾越的最大开展行数 ShortNamespaceLines: 1 # 容许排序 #include SortIncludes: 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, Always SpaceBeforeParens: ControlStatements # 不要确保指针限定符四周有空格,而是应用 PointerAlignment SpaceAroundPointerQualifiers: 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: 1 Maximum: -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 ...