vscode安裝配置clang-format插件及使用小結(jié)
vscode安裝配置clang-format插件及使用
首先安裝插件。在vscode擴(kuò)展里搜索
clang-format,安裝排名第一的xaver.clang-format。確認(rèn)clang-format可執(zhí)行程序路徑
- windows用
eveything查找一下clang-format.exe,
最新的擴(kuò)展 c/c++ 里集成了 clang-format。 如: C:\Users\jack\.vscode\extensions\ms-vscode.cpptools-1.13.9-win32-x64\LLVM\bin\clang-format.exe。
- Linux用命令
which clang-format查詢clang-format的安裝路徑,如:/usr/bin/clang-format。
如果沒找到這個(gè)程序,走第3步。
如果已經(jīng)有這個(gè)程序,走第4步。
- 安裝真正的格式化工具
clang-format。
- Linux系統(tǒng)安裝,使用命令
sudo apt install clang-format; - windows系統(tǒng)安裝,這個(gè)工具集成在工具包
LLVM里,下載地址:https://github.com/llvm/llvm-project/releases如選擇LLVM-14.0.6-win64.exe, 下載完成后不進(jìn)行安裝,解壓這個(gè)exe文件,會(huì)得到clang-format.exe。把這個(gè)可執(zhí)行文件復(fù)制到需要的地方就可以了。
- 把可執(zhí)行程序的路徑添加到
settings.json文件里。
如果要所有工程都有效,要配置到vscode用戶目錄里,不是工作目錄里的,
- windows目錄是:
C:\Users\jack\AppData\Roaming\Code\User\settings.json - Linux目錄是
~/.config/Code/User/settings.json
- 在配置文件里添加配置如下:
{
// clang-format 擴(kuò)展的配置
"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"
}如果是windows系統(tǒng),修改可執(zhí)行文件路徑為實(shí)際路徑,
如:"clang-format.executable": "C:\Users\jack\.vscode\extensions\ms-vscode.cpptools-1.13.9-win32-x64\LLVM\bin\clang-format.exe",
注意修改clang-format風(fēng)格配置文件路徑,
如:"clang-format.assumeFilename": "./.clang-format",或:"clang-format.assumeFilename": "/home/user/.clang-format",或:"clang-format.assumeFilename": "C:\Users\jack\.vscode\.clang-format",
如果只配置當(dāng)前工程,可以將配置添加到當(dāng)前的code-workspace文件
"settings": {
// clang-format 擴(kuò)展的配置,覆蓋用戶的 `settings.json`
// "clang-format.style" : "file:./.clang-format", //從指定配置文件讀取格式化風(fēng)格。
"clang-format.style" : "file",
// 依次從當(dāng)前目錄、工作目錄、path變量,加載默認(rèn)風(fēng)格配置文件(.clang-format)。
// 如果找不到則使用fallbackStyle, 沒有fallbackStyle則默認(rèn)LLVM,C++。
"clang-format.assumeFilename": "./.clang-format", //使用工作區(qū)獨(dú)立配置文件
// "clang-format.assumeFilename": "/home/user/.clang-format", //絕對(duì)路徑,用于全局統(tǒng)一配置
"clang-format.executable": "/usr/bin/clang-format",
"clang-format.fallbackStyle": "Google",
"editor.defaultFormatter": "xaver.clang-format",
// C/C++ 擴(kuò)展的配置
// "C_Cpp.formatting": "Default",
}可以同時(shí)在全局的settings.json和當(dāng)前工程配置格式化配置文件,當(dāng)前工程配置將覆蓋全局配置。
因此可以在全局的settings.json中配置全局的.clang-format的絕對(duì)路徑,如:"clang-format.assumeFilename": "/home/user/.clang-format",然后在當(dāng)前工程配置使用當(dāng)前目錄下的.clang-format,如:"clang-format.assumeFilename": "./.clang-format",
- 生成.clang-format 配置文件并修改自定義
clang-format --style=Google --dump-config > ./.clang-format
如下基于google的風(fēng)格進(jìn)行的定制
---
# https://clang.llvm.org/docs/ClangFormatStyleOptions.html
BasedOnStyle: LLVM
Language: Cpp
# this style configuration is based on google style configuration.
# The following configuration is different from the basic configuration.
# 縮進(jìn)寬度
IndentWidth: 4
# 訪問(wèn)權(quán)限說(shuō)明符(public/private等)的偏移
AccessModifierOffset: -4
# # 開括號(hào)(開圓括號(hào)、尖括號(hào)、方括號(hào))后的對(duì)齊: Align, DontAlign, AlwaysBreak(總是在開括號(hào)后換行)
# AlignAfterOpenBracket: Align
# # 連續(xù)賦值時(shí),對(duì)齊所有等號(hào)
# AlignConsecutiveAssignments: false
# # 連續(xù)聲明時(shí),對(duì)齊所有聲明的變量名
# AlignConsecutiveDeclarations: false
# 反斜桿換行的對(duì)齊方式
# -- DontAlign - 不進(jìn)行對(duì)齊
# -- Left - 反斜杠靠左對(duì)齊
# -- Right - 反斜杠靠右對(duì)齊
# AlignEscapedNewlines: Right
# 二元、三元表達(dá)式的對(duì)齊方式(當(dāng)表達(dá)式需要占用多行時(shí))
# -- DontAlign - 不進(jìn)行對(duì)齊
# -- Align - 從操作符開始對(duì)齊
# -- AlignAfterOperator - 從操作數(shù)開始對(duì)齊
AlignOperands: true
# # 是否對(duì)齊行尾注釋
# AlignTrailingComments: true
# # 函數(shù)聲明的所有參數(shù)在放在下一行
# AllowAllParametersOfDeclarationOnNextLine: false
# # 是否允許短的代碼塊放在同一行
# AllowShortBlocksOnASingleLine: false
# # 短的case標(biāo)簽和語(yǔ)句放在同一行
# AllowShortCaseLabelsOnASingleLine: true
# # 短的函數(shù)放在同一行
# -- None - 不把短的函數(shù)放在同一行
# -- InlineOnly - 只把類內(nèi)的內(nèi)聯(lián)函數(shù)放在同一行,全局的空函數(shù)不放在同一行
# -- Empty - 只把空的函數(shù)放在同一行
# -- Inline - 把類內(nèi)的內(nèi)聯(lián)函數(shù)放在同一行,全局的空函數(shù)不放在同一行
# -- All - 都允許放在同一行
AllowShortFunctionsOnASingleLine: InlineOnly
# # 短的if語(yǔ)句保持在同一行
# AllowShortIfStatementsOnASingleLine: true
# # 短的循環(huán)保持在同一行
# AllowShortLoopsOnASingleLine: true
# # 總是在返回類型后換行: None, All, TopLevel(頂級(jí)函數(shù),不包括在類中的函數(shù)),
# # AllDefinitions(所有的定義,不包括聲明), TopLevelDefinitions(所有的頂級(jí)函數(shù)的定義)
# AlwaysBreakAfterReturnType: None
# # 總是在多行string字面量前換行
# AlwaysBreakBeforeMultilineStrings: true
# # 總是在template聲明后換行
AlwaysBreakTemplateDeclarations: true
# # 函數(shù)調(diào)用時(shí),參數(shù)的放置規(guī)則
# -- false - 參數(shù)要么放在同一行,要么每個(gè)參數(shù)占用一行
# -- true - 不做強(qiáng)制要求
# BinPackArguments: true
# 函數(shù)聲明、定義時(shí),參數(shù)的放置規(guī)則
# -- false - 參數(shù)要么放在同一行,要么每個(gè)參數(shù)占用一行
# -- true - 不做強(qiáng)制要求
# BinPackParameters: true
# 大括號(hào)放置風(fēng)格
# -- Attach - 大括號(hào)緊隨前方內(nèi)容,放在同一行
# -- Linux - 與 Attach 類似,除了 函數(shù)、命名空間、類定義 的大括號(hào)放在下一行
# -- Mozilla - 與 Attach 類似,除了枚舉、函數(shù)、結(jié)構(gòu)(class\struct\union)的大括號(hào)放在下一行
# -- Stroustrup - 與 Attach 類似,但函數(shù)定義前、catch前方、else前方的"{}"放在單獨(dú)一行
# -- Allman - 總是換行
# -- Whitesmiths - 類似 Allman,但"{}"和內(nèi)部的語(yǔ)句對(duì)齊到同樣位置
# -- GNU - 總是換行,但在控制語(yǔ)句后的"{}"總是對(duì)齊到下一個(gè)位置
# -- WebKit - 與 Attach 類似,但在函數(shù)定義前換行
# -- Custom - 依賴 BraceWrapping
# 注:這里認(rèn)為語(yǔ)句塊也屬于函數(shù)
BreakBeforeBraces: Custom
# 大括號(hào)換行,只有當(dāng)BreakBeforeBraces設(shè)置為Custom時(shí)才有效
BraceWrapping:
# class定義后面
AfterClass: true
# 控制語(yǔ)句后面
AfterControlStatement: false
# enum定義后面
AfterEnum: false
# 函數(shù)定義后面
AfterFunction: true
# 命名空間定義后面
AfterNamespace: true
# ObjC定義后面
AfterObjCDeclaration: false
# struct定義后面
AfterStruct: false
# union定義后面
AfterUnion: false
# extern之后
AfterExternBlock: true
# catch之前
BeforeCatch: false
# else之前
BeforeElse: false
# 繼續(xù)縮進(jìn)大括號(hào)
IndentBraces: false
# 分離空函數(shù)
# # 當(dāng)空白函數(shù)的"{}"和函數(shù)名稱不需要放在同一行時(shí),是否拆分函數(shù)體
SplitEmptyFunction: true
# 分離空語(yǔ)句
# # 當(dāng)空白結(jié)構(gòu)(class\struct\union)的"{}"需要放在單獨(dú)的行時(shí),是否拆分"{}"
SplitEmptyRecord: true
# 分離空命名空間
# # 當(dāng)空白的命名空間的"{}"需要放在單獨(dú)的行時(shí),是否拆分"{}"
SplitEmptyNamespace: true
# # 在二元運(yùn)算符前換行: None(在操作符后換行), NonAssignment(在非賦值的操作符前換行), All(在操作符前換行)
BreakBeforeBinaryOperators: NonAssignment
# BreakBeforeInheritanceComma: false
# # 在三元運(yùn)算符前換行
# 當(dāng)三元表達(dá)式不能放在同一行時(shí),是否在三元操作符前方換行
# -- true - 操作符位于新行的首部
# -- false - 操作符位于上一行的尾部
BreakBeforeTernaryOperators: true
# BreakConstructorInitializersBeforeComma: false
# # 構(gòu)造函數(shù)初始化列表分割方式
# -- BeforeColon - 在冒號(hào) ':' 前方分割,冒號(hào)位于行首,逗號(hào)','位于行尾
# -- BeforeComma - 在冒號(hào)和逗號(hào)前方分割,冒號(hào)和逗號(hào)都位于行首,并且對(duì)齊
# -- AfterColon - 在冒號(hào)和逗號(hào)后方分割,冒號(hào)和逗號(hào)位于行尾
BreakConstructorInitializers: BeforeColon
# # 是否在每個(gè)java注解后方換行
# BreakAfterJavaFieldAnnotations: false
# # 是否分割過(guò)長(zhǎng)的字符串
# BreakStringLiterals: false
# # 每行字符長(zhǎng)度的限制,0表示沒有限制
ColumnLimit: 100
# # 用于匹配注釋信息的正則表達(dá)式,被匹配的行不會(huì)做任何修改
# CommentPragmas: '^ IWYU pragma:'
# 是否壓縮緊接的命名空間
# -- true - 將緊跟的命名空間放在同一行
# -- false - 每個(gè)命名空間位于新的一行
CompactNamespaces: false
# # 構(gòu)造函數(shù)的初始化列表要么都在同一行,要么都各自一行
# -- true - 如果可能,初始化列表放在同一行;如果不滿足長(zhǎng)度選擇,則每個(gè)單獨(dú)放一行
# -- false - 初始化列表可以隨意放置
# ConstructorInitializerAllOnOneLineOrOnePerLine: false
# # 構(gòu)造函數(shù)的初始化列表和基類集成列表的對(duì)齊寬度
ConstructorInitializerIndentWidth: 4
# # 延續(xù)語(yǔ)句的對(duì)齊寬度
ContinuationIndentWidth: 4
# # 去除C++11的列表初始化的大括號(hào){后和}前的空格
Cpp11BracedListStyle: true
# 是否自動(dòng)分析指針的對(duì)齊方式
# -- true - 自動(dòng)分析并使用指針的對(duì)齊方式,若無(wú)法分析,則使用 PointerAlignment
# -- false - 不自動(dòng)分析
# DerivePointerAlignment: true
# 是否禁用格式化
DisableFormat: false
# ExperimentalAutoDetectBinPacking: false
# 是否自動(dòng)修正命名空間的結(jié)束注釋
# -- true - 在短的命名空間尾部,自動(dòng)添加或修改錯(cuò)誤的命名空間結(jié)束注釋
# -- false - 不自動(dòng)修正
FixNamespaceComments: true
# foreach 循環(huán)
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
# 多個(gè) include 塊(有空行分隔的include)排序時(shí)的分組規(guī)則
# -- Preserve - 保留原有的塊分隔,各自排序
# -- Merge - 將所有的塊視為同一個(gè),然后進(jìn)行排序
# -- Regroup - 將所有的塊視為同一個(gè)進(jìn)行排序,然后按照 IncludeCategories 的規(guī)則進(jìn)行分組
IncludeBlocks: Preserve
# IncludeCategories:
# - Regex: '^<ext/.*\.h>'
# Priority: 2
# - Regex: '^<.*\.h>'
# Priority: 1
# - Regex: '^<.*'
# Priority: 2
# - Regex: '.*'
# Priority: 3
# IncludeIsMainRegex: '([-_](test|unittest))?$'
# # 縮進(jìn)case標(biāo)簽
# -- true - case 不與 switch 對(duì)齊
# -- false - case 和 switch 對(duì)齊
IndentCaseLabels: true
# 預(yù)處理命令(#if\#ifdef\#endif等)的縮進(jìn)規(guī)則
# -- None - 不進(jìn)行縮進(jìn)
# -- AfterHash - 在前導(dǎo)'#'后縮進(jìn),'#'放在最左側(cè),之后的語(yǔ)句參與縮進(jìn)
# -- BeforeHash - 在前導(dǎo)'#'前進(jìn)行縮進(jìn)
IndentPPDirectives: AfterHash
# # 函數(shù)返回類型換行時(shí),縮進(jìn)函數(shù)聲明或函數(shù)定義的函數(shù)名
# IndentWrappedFunctionNames: false
# JavaScript 中的字符串引號(hào)規(guī)則
# -- Leave - 保持原樣
# -- Single - 全部使用單引號(hào)
# -- Double - 全部使用雙引號(hào)
JavaScriptQuotes: Leave
# 是否在 JavaScript 的 import/export 語(yǔ)句后換行
# JavaScriptWrapImports: true
# # 保留在塊開始處的空行
# -- true - 保留塊起始的空行
# -- false - 刪除塊起始的空行
KeepEmptyLinesAtTheStartOfBlocks: true
# 用于識(shí)別宏定義型塊起始的正則表達(dá)式
# MacroBlockBegin: ''
# 用于識(shí)別宏定義型塊結(jié)束的正則表達(dá)式
# MacroBlockEnd: ''
# # 連續(xù)空行的最大數(shù)量
MaxEmptyLinesToKeep: 1
# # 命名空間內(nèi)部的縮進(jìn)規(guī)則
# -- None - 都不縮進(jìn)
# -- Inner - 只縮進(jìn)嵌套的命名空間內(nèi)容
# -- All - 縮進(jìn)所有命名空間內(nèi)容
NamespaceIndentation: Inner
# Objective-C 相關(guān)配置
# ObjCBlockIndentWidth: 2
# ObjCSpaceAfterProperty: false
# ObjCSpaceBeforeProtocolList: false
# PenaltyBreakAssignment: 2
# PenaltyBreakBeforeFirstCallParameter: 1
# PenaltyBreakComment: 300
# PenaltyBreakFirstLessLess: 120
# PenaltyBreakString: 1000
# PenaltyExcessCharacter: 1000000
# PenaltyReturnTypeOnItsOwnLine: 200
# # 指針和引用(*和&)的對(duì)齊規(guī)則
# -- Left - * 靠近左側(cè)
# -- Right - * 靠近右側(cè)
# -- Middle - * 放在中間
# NOTE : 在 SpaceAroundPointerQualifiers 為 Default,
# 且 DerivePointerAlignment 失效后啟用
PointerAlignment: Right
# RawStringFormats:
# - Delimiter: pb
# Language: TextProto
# BasedOnStyle: google
# # 重新排版注釋
ReflowComments: false
# # 重新排序#include
# -- Never - 不進(jìn)行排序
# -- CaseSensitive - 排序時(shí)大小寫敏感
# -- CaseInsensitive - 排序時(shí)大小寫不敏感
SortIncludes: false
# java 中靜態(tài) import 的排序規(guī)則
# -- Before - 靜態(tài)放在非靜態(tài)前方
# -- After - 靜態(tài)放在非靜態(tài)后方
# SortJavaStaticImport: Before
# # 重新排序using聲明
SortUsingDeclarations: false
# # 在C風(fēng)格類型轉(zhuǎn)換后添加空格
SpaceAfterCStyleCast: false
# # 在Template關(guān)鍵字后面添加空格
SpaceAfterTemplateKeyword: true
# # 在賦值運(yùn)算符之前添加空格
SpaceBeforeAssignmentOperators: true
# # 在 C++11 的初始化列表前加空格
# SpaceBeforeCpp11BracedList: true
# 在構(gòu)造函數(shù)的初始化冒號(hào)":"前加空格
# SpaceBeforeCtorInitializerColon: true
# 在構(gòu)造函數(shù)的繼承冒號(hào)":"前加空格
# SpaceBeforeInheritanceColon: true
# 小括號(hào)"()"前加空格的規(guī)則
# -- Never - 從不加空格
# -- ControlStatements - 只在控制語(yǔ)句(for/if/while...)時(shí)加空格
# -- ControlStatementsExceptForEachMacros - 類型 ControlStatements,只是不再 ForEach 后加空格
# -- Always - 總是添加空格
# -- NonEmptyParentheses - 類似 Always,只是不再空白括號(hào)前加空格
SpaceBeforeParens: ControlStatements
# 在 for 循環(huán)的冒號(hào)":"前加空格
# SpaceBeforeRangeBasedForLoopColon: true
# # 在空白的小括號(hào)"()"中添加空格
SpaceInEmptyParentheses: false
# # 在行尾的注釋前添加的空格數(shù)(只適用于//)
SpacesBeforeTrailingComments: 1
# # 在尖括號(hào)的"<"后,和">"前添加空格
SpacesInAngles: false
# # 在容器(ObjC和JavaScript的數(shù)組和字典等)字面量中添加空格
SpacesInContainerLiterals: true
# # 在C風(fēng)格類型轉(zhuǎn)換的括號(hào)中添加空格
SpacesInCStyleCastParentheses: false
# # 在圓括號(hào)的"("后,和")"前添加空格
SpacesInParentheses: false
# 在中括號(hào)中加空格
# 當(dāng)中括號(hào)內(nèi)沒有數(shù)據(jù)時(shí),不受本規(guī)則影響(如空白的lambda 捕獲表、不定長(zhǎng)度的數(shù)組聲明)
SpacesInSquareBrackets: false
# 語(yǔ)言標(biāo)準(zhǔn): Cpp03, Cpp11, Auto
Standard: Auto
# # tab寬度
TabWidth: 4
# # 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, Always
UseTab: Never
---可以將.clang-format文件放置在當(dāng)前工作目錄,或父目錄,僅供當(dāng)前項(xiàng)目使用。
也可以將.clang-format文件放置在用戶宿主目錄,在配置文件中使用絕對(duì)路徑,供所有項(xiàng)目使用。
- 格式化代碼
- 在代碼頁(yè)面按
<Ctrl-Shift-f>,選擇使用…格式化代碼(Format Document With...),選擇Clang-Format。 - 全選代碼,鼠標(biāo)右鍵,
使用…格式化代碼(Format Document With...),選擇Clang-Format。
到此這篇關(guān)于vscode安裝配置clang-format插件及使用小結(jié)的文章就介紹到這了,更多相關(guān)vscode安裝配置clang-format內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue3?vscode插件volar配置教程
- vscode不同項(xiàng)目使用不同的插件的實(shí)現(xiàn)
- VSCode安裝go相關(guān)插件失敗的簡(jiǎn)單解決方案
- 初學(xué)Go必備的vscode插件及最常用快捷鍵和代碼自動(dòng)補(bǔ)全
- VScode第三方插件打開sqlite數(shù)據(jù)庫(kù)圖文教程
- vscode錄音及語(yǔ)音實(shí)時(shí)轉(zhuǎn)寫插件開發(fā)并在工作區(qū)生成本地mp3文件附踩坑日記!
- VSCode多行注釋插件KoroFileHeader使用示例
- Vscode ChatGPT插件使用(無(wú)需代理注冊(cè))
- VsCode插件自動(dòng)生成注釋插件koroFileHeader使用教程
- VSCode中ESLint插件修復(fù)以及配置教程
- vscode插件設(shè)置之Golang開發(fā)環(huán)境配置全過(guò)程
相關(guān)文章
詳解IDEA Git Reset 選項(xiàng)說(shuō)明
這篇文章主要介紹了詳解IDEA Git Reset 選項(xiàng)說(shuō)明,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
git 入門教程之本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)的本質(zhì)介紹
本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)在本質(zhì)上沒有太大區(qū)別,只不過(guò)一個(gè)是本地電腦,一個(gè)是遠(yuǎn)程電腦.這篇文章主要介紹了git 入門教程之本地和遠(yuǎn)程倉(cāng)庫(kù)的本質(zhì)介紹,需要的朋友可以參考下2020-08-08
IDEA使用code?with?me來(lái)進(jìn)行多人遠(yuǎn)程編程的實(shí)現(xiàn)
本文主要介紹了IDEA使用code?with?me來(lái)進(jìn)行多人遠(yuǎn)程編程的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
為Jenkins創(chuàng)建定時(shí)構(gòu)建任務(wù)
這篇文章介紹了為Jenkins創(chuàng)建定時(shí)構(gòu)建任務(wù)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03

