VSCode安装clang-format插件及使用

1.clang-format插件安装

插件安装方式分为直接安装和离线安装两种。

直接安装:在VSCode扩展里搜索clang-format,安装排名第一的插件;
离线安装:链接: VSCode插件商店里搜索clang-format,选择下载次数最多的插件,点击下载离线包,然后在VSCode中安装离线包。

下载插件安装包:插件安装包下载
VSCode中安装离线包:
VSCode中安装离线包

2.安装真正的格式化工具clang-format

  • Linux系统安装:使用命令sudo apt install clang-format;
  • windows系统安装:这个工具集成在工具包LLVM中,下载最新的.exe包,下载完成后进行安装,在安装目录的bin文件夹下可以找到clang-format.exe。

3.生成.clang-format配置文件并修改

生成.clang-format配置文件命令:

clang-format --style=LLVM --dump-config > ./.clang-format

如下基于LLVM风格进行的定制:

---
BasedOnStyle:   LLVM
Language:        Cpp

# this style configuration is based on google style configuration.
# The following configuration is different from the basic configuration.

# 缩进宽度
IndentWidth:     4

# 访问权限说明符(public/private)的偏移
AccessModifierOffset: -4

# # 开括号(开圆括号、尖括号、方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)
# AlignAfterOpenBracket: Align

# # 连续赋值时,对齐所有等号
AlignConsecutiveAssignments: true

# # 连续声明时,对齐所有声明的变量名
AlignConsecutiveDeclarations: true

# 反斜杆换行的对齐方式
# -- DontAlign - 不进行对齐
# -- Left - 反斜杠靠左对齐
# -- Right - 反斜杠靠右对齐
# AlignEscapedNewlines: Right

# 二元、三元表达式的对齐方式(当表达式需要占用多行时)
# -- DontAlign - 不进行对齐
# -- Align - 从操作符开始对齐
# -- AlignAfterOperator - 从操作数开始对齐
AlignOperands:   true

# # 是否对齐行尾注释
AlignTrailingComments: true

# # 函数声明的所有参数在放在下一行
# AllowAllParametersOfDeclarationOnNextLine: false

# # 是否允许短的代码块放在同一行
# AllowShortBlocksOnASingleLine: false

# # 短的case标签和语句放在同一行
# AllowShortCaseLabelsOnASingleLine: true

# # 短的函数放在同一行
# -- None - 不把短的函数放在同一行
# -- InlineOnly - 只把类内的内联函数放在同一行,全局的空函数不放在同一行
# -- Empty - 只把空的函数放在同一行
# -- Inline - 把类内的内联函数放在同一行,全局的空函数不放在同一行
# -- All - 都允许放在同一行
AllowShortFunctionsOnASingleLine: InlineOnly

# # 短的if语句保持在同一行
# AllowShortIfStatementsOnASingleLine: true

# # 短的循环保持在同一行
# AllowShortLoopsOnASingleLine: true

# # 总是在返回类型后换行: None, All, TopLevel(顶级函数,不包括在类中的函数), 
# # AllDefinitions(所有的定义,不包括声明), TopLevelDefinitions(所有的顶级函数的定义)
# AlwaysBreakAfterReturnType: None

# # 总是在多行string字面量前换行
# AlwaysBreakBeforeMultilineStrings: true

# # 总是在template声明后换行
AlwaysBreakTemplateDeclarations: true

# # 函数调用时,参数的放置规则
# -- false - 参数要么放在同一行,要么每个参数占用一行
# -- true - 不做强制要求
# BinPackArguments: true

# 函数声明、定义时,参数的放置规则
# -- false - 参数要么放在同一行,要么每个参数占用一行
# -- true - 不做强制要求
# BinPackParameters: true

# 大括号放置风格
# -- Attach - 大括号紧随前方内容,放在同一行
# -- Linux - 与 Attach 类似,除了 函数、命名空间、类定义 的大括号放在下一行
# -- Mozilla - 与 Attach 类似,除了枚举、函数、结构(class\struct\union)的大括号放在下一行
# -- Stroustrup - 与 Attach 类似,但函数定义前、catch前方、else前方的"{}"放在单独一行
# -- Allman - 总是换行
# -- Whitesmiths - 类似 Allman,但"{}"和内部的语句对齐到同样位置
# -- GNU - 总是换行,但在控制语句后的"{}"总是对齐到下一个位置
# -- WebKit - 与 Attach 类似,但在函数定义前换行 
# -- Custom - 依赖 BraceWrapping
#   注:这里认为语句块也属于函数
BreakBeforeBraces: Custom

# 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效
BraceWrapping:
  # class定义后面
  AfterClass: true
  # 控制语句后面
  AfterControlStatement: true
  # enum定义后面
  AfterEnum: true
  # 函数定义后面
  AfterFunction: true
  # 命名空间定义后面
  AfterNamespace: true
  # ObjC定义后面
  AfterObjCDeclaration: true
  # struct定义后面
  AfterStruct: true
  # union定义后面
  AfterUnion: true
  # extern之后
  AfterExternBlock: true
  # catch之前
  BeforeCatch: true
  # else之前
  BeforeElse: true
  # 继续缩进大括号
  IndentBraces: false
  # 分离空函数
  # # 当空白函数的"{}"和函数名称不需要放在同一行时,是否拆分函数体
  SplitEmptyFunction: true
  # 分离空语句
  # # 当空白结构(class\struct\union)"{}"需要放在单独的行时,是否拆分"{}"
  SplitEmptyRecord: true
  # 分离空命名空间
  # # 当空白的命名空间的"{}"需要放在单独的行时,是否拆分"{}"
  SplitEmptyNamespace: true

# # 在二元运算符前换行: None(在操作符后换行), NonAssignment(在非赋值的操作符前换行), All(在操作符前换行)
BreakBeforeBinaryOperators: NonAssignment

# BreakBeforeInheritanceComma: false

# # 在三元运算符前换行
# 当三元表达式不能放在同一行时,是否在三元操作符前方换行
# -- true - 操作符位于新行的首部
# -- false - 操作符位于上一行的尾部
BreakBeforeTernaryOperators: true

# BreakConstructorInitializersBeforeComma: false

# # 构造函数初始化列表分割方式
# -- BeforeColon - 在冒号 ':' 前方分割,冒号位于行首,逗号','位于行尾
# -- BeforeComma - 在冒号和逗号前方分割,冒号和逗号都位于行首,并且对齐 
# -- AfterColon - 在冒号和逗号后方分割,冒号和逗号位于行尾
BreakConstructorInitializers: BeforeColon

# # 是否在每个java注解后方换行
# BreakAfterJavaFieldAnnotations: false

# # 是否分割过长的字符串
# BreakStringLiterals: false

# # 每行字符长度的限制,0表示没有限制
ColumnLimit:     0

# # 用于匹配注释信息的正则表达式,被匹配的行不会做任何修改
# CommentPragmas:  '^ IWYU pragma:'
# 是否压缩紧接的命名空间
# -- true - 将紧跟的命名空间放在同一行
# -- false - 每个命名空间位于新的一行
CompactNamespaces: false

# # 构造函数的初始化列表要么都在同一行,要么都各自一行
# -- true - 如果可能,初始化列表放在同一行;如果不满足长度选择,则每个单独放一行
# -- false - 初始化列表可以随意放置
# ConstructorInitializerAllOnOneLineOrOnePerLine: false

# # 构造函数的初始化列表和基类集成列表的对齐宽度
ConstructorInitializerIndentWidth: 4

# # 延续语句的对齐宽度
ContinuationIndentWidth: 4

# # 去除C++11的列表初始化的大括号{后和}前的空格
Cpp11BracedListStyle: true

# 是否自动分析指针的对齐方式
# -- true - 自动分析并使用指针的对齐方式,若无法分析,则使用 PointerAlignment
# -- false - 不自动分析
# DerivePointerAlignment: true
 
# 是否禁用格式化
DisableFormat:   false
# ExperimentalAutoDetectBinPacking: false

# 是否自动修正命名空间的结束注释
# -- true - 在短的命名空间尾部,自动添加或修改错误的命名空间结束注释
# -- false - 不自动修正
FixNamespaceComments: true

# foreach 循环
ForEachMacros:
  - foreach
  - Q_FOREACH
  - BOOST_FOREACH

# 多个 include 块(有空行分隔的include)排序时的分组规则
# -- Preserve - 保留原有的块分隔,各自排序
# -- Merge - 将所有的块视为同一个,然后进行排序
# -- Regroup - 将所有的块视为同一个进行排序,然后按照 IncludeCategories 的规则进行分组
IncludeBlocks:   Preserve

# IncludeCategories: 
#   - Regex:           '^<ext/.*\.h>'
#     Priority:        2
#   - Regex:           '^<.*\.h>'
#     Priority:        1
#   - Regex:           '^<.*'
#     Priority:        2
#   - Regex:           '.*'
#     Priority:        3
# IncludeIsMainRegex: '([-_](test|unittest))?$'

# # 缩进case标签
# -- true - case 不与 switch 对齐
# -- false - caseswitch 对齐
IndentCaseLabels: false

# 预处理命令(#if\#ifdef\#endif等)的缩进规则
# -- None - 不进行缩进
# -- AfterHash - 在前导'#'后缩进,'#'放在最左侧,之后的语句参与缩进
# -- BeforeHash - 在前导'#'前进行缩进
IndentPPDirectives: AfterHash

# # 函数返回类型换行时,缩进函数声明或函数定义的函数名
# IndentWrappedFunctionNames: false

# JavaScript 中的字符串引号规则
# -- Leave - 保持原样
# -- Single - 全部使用单引号
# -- Double - 全部使用双引号 
JavaScriptQuotes: Leave

# 是否在 JavaScript 的 import/export 语句后换行
# JavaScriptWrapImports: true

# # 保留在块开始处的空行
# -- true - 保留块起始的空行
# -- false - 删除块起始的空行
KeepEmptyLinesAtTheStartOfBlocks: true

# 用于识别宏定义型块起始的正则表达式
# MacroBlockBegin: ''

# 用于识别宏定义型块结束的正则表达式
# MacroBlockEnd:   ''

# # 连续空行的最大数量
MaxEmptyLinesToKeep: 1

# # 命名空间内部的缩进规则
# -- None - 都不缩进
# -- Inner - 只缩进嵌套的命名空间内容
# -- All - 缩进所有命名空间内容
NamespaceIndentation: None

# Objective-C 相关配置
# ObjCBlockIndentWidth: 2
# ObjCSpaceAfterProperty: false
# ObjCSpaceBeforeProtocolList: false
# PenaltyBreakAssignment: 2
# PenaltyBreakBeforeFirstCallParameter: 1
# PenaltyBreakComment: 300
# PenaltyBreakFirstLessLess: 120
# PenaltyBreakString: 1000
# PenaltyExcessCharacter: 1000000
# PenaltyReturnTypeOnItsOwnLine: 200

# # 指针和引用(*&)的对齐规则
# -- Left - * 靠近左侧
# -- Right - * 靠近右侧
# -- Middle - * 放在中间
# NOTE : 在 SpaceAroundPointerQualifiers 为 Default,
# 	 且 DerivePointerAlignment 失效后启用
PointerAlignment: Right

# RawStringFormats: 
#   - Delimiter:       pb
#     Language:        TextProto
#     BasedOnStyle:    google

# # 重新排版注释
ReflowComments:  false

# # 重新排序#include
# -- Never - 不进行排序
# -- CaseSensitive - 排序时大小写敏感
# -- CaseInsensitive - 排序时大小写不敏感
SortIncludes:    false

# java 中静态 import 的排序规则
# -- Before - 静态放在非静态前方
# -- After - 静态放在非静态后方
# SortJavaStaticImport: Before

# # 重新排序using声明
SortUsingDeclarations: false

# # 在C风格类型转换后添加空格
SpaceAfterCStyleCast: false

# # 在Template关键字后面添加空格
SpaceAfterTemplateKeyword: true

# # 在赋值运算符之前添加空格
SpaceBeforeAssignmentOperators: true

# # 在 C++11 的初始化列表前加空格
# SpaceBeforeCpp11BracedList: true

# 在构造函数的初始化冒号":"前加空格
# SpaceBeforeCtorInitializerColon: true

# 在构造函数的继承冒号":"前加空格
# SpaceBeforeInheritanceColon: true

# 小括号"()"前加空格的规则
# -- Never - 从不加空格
# -- ControlStatements - 只在控制语句(for/if/while...)时加空格
# -- ControlStatementsExceptForEachMacros - 类型 ControlStatements,只是不再 ForEach 后加空格
# -- Always - 总是添加空格
# -- NonEmptyParentheses - 类似 Always,只是不再空白括号前加空格  
SpaceBeforeParens: Never

# 在 for 循环的冒号":"前加空格
# SpaceBeforeRangeBasedForLoopColon: true

# # 在空白的小括号"()"中添加空格
SpaceInEmptyParentheses: false

# # 在行尾的注释前添加的空格数(只适用于//)
SpacesBeforeTrailingComments: 1

# # 在尖括号的"<",">"前添加空格
SpacesInAngles:  false

# # 在容器(ObjC和JavaScript的数组和字典等)字面量中添加空格
SpacesInContainerLiterals: true

# # 在C风格类型转换的括号中添加空格
SpacesInCStyleCastParentheses: false

# # 在圆括号的"(",")"前添加空格
SpacesInParentheses: false

# 在中括号中加空格
# 当中括号内没有数据时,不受本规则影响(如空白的lambda 捕获表、不定长度的数组声明)
SpacesInSquareBrackets: false

# 语言标准: Cpp03, Cpp11, Auto
Standard: Auto

# # tab宽度
TabWidth: 4

# # 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, Always
UseTab: ForIndentation
...

4.修改配置文件

VSCode配置文件分为全局配置文件和工作空间配置文件,全局配置文件对全部工作空间有效,工作空间配置文件对当前工作空间有效。
可以同时修改全局配置文件和当前工作空间配置文件,当前工作空间配置将覆盖全局配置。

4.1全局配置文件修改

在VSCode中,按“F1”按键,输入“setting”,点击下图选项,可打开全局的settings.json文件:
全局配置文件
在配置文件里添加如下配置:

{
    // clang-format 扩展的配置
    "clang-format.style" : "file",
    "clang-format.assumeFilename": "/home/user/.clang-format",
    "clang-format.executable": "/usr/bin/clang-format",
    "clang-format.fallbackStyle": "Google",
    "editor.defaultFormatter": "xaver.clang-format"
}

其中,clang-format.assumeFilename为.clang-format配置文件的路径,clang-format.executable为clang-format程序的路径。

4.2工作空间配置文件修改

在VSCode中,按“F1”按键,输入“setting”,点击下图选项,可打开当前工作空间的settings.json文件:
在这里插入图片描述
在配置文件里添加如下配置:

{
    // clang-format 扩展的配置
    "clang-format.style" : "file",
    "clang-format.assumeFilename": "/home/user/.clang-format",
    "clang-format.executable": "/usr/bin/clang-format",
    "clang-format.fallbackStyle": "Google",
    "editor.defaultFormatter": "xaver.clang-format"
}

其中,clang-format.assumeFilename为.clang-format配置文件的路径,clang-format.executable为clang-format程序的路径。

5.格式化代码

  • 在代码页面按Ctrl+Shift+f
  • 全选代码,鼠标右键,使用…格式化代码(Format Document With...),选择Clang-Format
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: VSCode是一个开源的轻量级代码编辑器,而Clang-Format是一个用于格式化C、C++和Objective-C代码的工具。它们可以配合使用,以提高代码的规范性和可读性。 要正确匹配VSCode版本和Clang-Format插件,首先需要确保VSCodeClang-Format插件都是最新版本,以获得最佳的兼容性和稳定性。 在VSCode安装Clang-Format插件非常简单。首先,打开VSCode编辑器,然后点击左侧的“扩展”图标。在搜索栏中输入“Clang-Format”,找到Clang-Format插件并点击“安装”按钮进行安装安装完成后,点击“启用”按钮激活插件。 一旦Clang-Format插件安装完成并激活,你可以通过以下步骤配置插件: 1. 打开VSCode的设置菜单,选择“首选项” > “设置”。 2. 点击右上角的“打开设置(json)”按钮,打开设置文件。 3. 在设置文件中,你可以配置Clang-Format的选项。例如,你可以设置格式化的样式、缩进的大小等。你还可以指定Clang-Format的配置文件路径,以便更具体地定义格式化规则。 4. 保存设置文件并关闭。 现在,当你在VSCode编辑器中打开C、C++或Objective-C代码文件时,你可以使用快捷键或右键菜单中的选项来应用Clang-Format插件。选择适当的选项后,Clang-Format将格式化代码,并应用你在设置文件中定义的规则。 总之,VSCodeClang-Format插件可以很好地匹配使用,以提供高质量的代码格式化和规范化。通过安装最新版本的VSCodeClang-Format插件,并正确配置插件选项,你可以获得更好的代码编写体验。 ### 回答2: VSCode是一款广受欢迎的集成开发环境(IDE),拥有丰富的扩展功能,可以帮助开发者提高工作效率。而Clang-Format是一个用于代码格式化的插件,可以帮助开发者在编写代码时保持统一的代码风格。 VSCode的版本与Clang-Format插件的匹配需要确保两者之间的兼容性。通常来说,VSCode版本与插件的匹配主要受两方面的影响:VSCode本身的功能和插件的兼容性。 首先,VSCode的版本需要满足一定的功能要求,以支持Clang-Format插件的运行。对于较新的VSCode版本,通常会包含丰富的API和功能,提供了更好的扩展性和兼容性,能够更好地支持插件的运行。 其次,插件本身需要兼容当前使用Clang-Format工具版本。Clang-Format是由Clang项目开发的一款代码格式化工具,用于统一代码的风格。该工具会不断进行更新和发布新的版本,不同的版本可能会存在一些差异和兼容性问题。因此,在选择Clang-Format插件时,需要确保该插件的兼容性覆盖了当前使用Clang-Format工具版本。 总而言之,为了保持VSCode版本与Clang-Format插件的匹配,我们需要选择适用于当前VSCode版本的Clang-Format插件,并确保该插件的兼容性覆盖了所使用Clang-Format工具版本。这样,我们就能够在编写代码时,通过Clang-Format插件实现代码的统一格式化,提高代码的可读性和维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值