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

