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-08git 入門教程之本地倉(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-08IDEA使用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