來源:iOS_小松哥ide
連接:http://www.jianshu.com/p/a725e24d7835ui
爲何要格式化代碼spa
當團隊內有多人開發的時候,每一個人寫的代碼格式都有本身的喜愛,也可能會忙着寫代碼而忽略了格式的問題。插件
在以前,咱們可能會寫完代碼後,再一點一點去調格式,很浪費時間。3d
有了ClangFormat插件後,就能夠一鍵把代碼格式化成統一的樣式,不只節省了時間,也使得代碼更規範。咱們還能夠定製本身喜歡的樣式。指針
安裝ClangFormat插件code
能夠手動安裝(下載GitHub項目編譯),也能夠用Alcatraz(插件管理器)安裝,都很簡單,具體能夠看個人文章《Xcode方便開發的插件推薦》。orm
裝好後是下圖這樣的,咱們能夠看到它內置了LLVM、Google、Chromium、Mozilla、WebKit五種樣式。blog
使用方法ip
經過菜單能夠看到,它能夠格式化選中的文字們,或者格式化選擇的文件們。下面演示下LLVM樣式下的格式化:
LLVM樣式下的格式化
使用自定義樣式
一、須要先把上面菜單裏面的File選中,由於咱們須要讓它用咱們本身寫的配置文件。
選中File
二、在工程目錄下建立配置文件.clang-format文件並編輯。.clang-format文件用的是YAML格式:裏面要用的字段在後面會詳細解釋。
讓一段代碼不受格式化影響
設置快捷鍵
首先你能夠選中菜單中的 Enable Format On Sava,把它點Disable Format On Sava,這樣之後每次按⌘+S保存文件時就能夠自動格式化了。
咱們也能夠給一些菜單設置快捷鍵,使用的時候不用每次去選擇各級菜單了。好比咱們給Format Selected Text設置快捷鍵:
設置格式化快捷鍵
你也能夠爲其餘菜單設置快捷鍵,其實呢,我用Format Selected Text的時候不多,每次都是想格式化的時候直接⌘+S就好了哈哈哈。
配置文件中屬性的含義講解
下面說一些配置文件的經常使用的參數介紹,其餘的能夠看官方文檔:Clang-Format Style Options,其中小括號內表明他需的是什麼類型的值。
BasedOnStyle (string)
基於哪一種樣式。除了文件中寫出的定製屬性外,別的沒定製的屬性都默認用這種樣式的。
可選值有五種:
LLVM:一種遵循LLVM coding standards的樣式。
Google:一種遵循Google’s C++ style guide的樣式。
Chromium:一種遵循Chromium’s style guide的樣式。
Mozilla:一種遵循Mozilla’s style guide的樣式。
WebKit:一種遵循WebKit’s style guide的樣式。
AccessModifierOffset (int)
訪問修飾詞 (好比public) 前面額外須要加的縮進長度。默認爲0。
AlignConsecutiveAssignments (bool)
若是是true,把連續的賦值操做按=對齊,默認爲false。
AlignConsecutiveDeclarations-true
AlignConsecutiveDeclarations (bool)
若是是true,把連續行的變量名對齊。默認爲false。
AlignConsecutiveDeclarations-true
AlignTrailingComments (bool)
若是是true,對齊尾部註釋。默認爲false。
AlignTrailingComments-true
AllowShortCaseLabelsOnASingleLine (bool)
若是是true, 容許一個case在一行寫完,默認爲false。
AllowShortCaseLabelsOnASingleLine-true
BreakBeforeBraces (string)
大括號前面是否換行,具體可選值看文檔。通常用Allman,表明全部大括號都換行。
BreakBeforeBraces-Allman
ColumnLimit (unsigned)
每行最多多少個字符,0不限制
IndentWidth (unsigned)
縮進寬度,默認爲2,可是咱們通常設置爲4。
IndentWidth-4
IndentCaseLabels (bool)
switch的case縮進寬度,通常用true。默認爲false,case會和switch對齊。
KeepEmptyLinesAtTheStartOfBlocks (bool)
是否保留block裏面開始的空行們。默認爲true。
KeepEmptyLinesAtTheStartOfBlocks-true
MaxEmptyLinesToKeep (unsigned)
最多能夠有連續幾行空行,默認爲1。
MaxEmptyLinesToKeep-1
ObjCBlockIndentWidth
OC的block裏面的縮進寬度,默認爲4。
ObjCSpaceAfterProperty (bool)
OC裏面,是否在@property後加空格。默認爲false。
ObjCSpaceBeforeProtocolList-true
PointerAlignment (string)
指針的位置。默認爲Right。
可選值:
Left:NSString* name
Middle:NSString * name
Right:NSString *name
SpaceBeforeAssignmentOperators (bool)
= 前面是否有空格。默認爲true。
SpaceBeforeParens (string)
是否在(前面加空格。默認ControlStatements。
可選值:
Never: 歷來不在(前面加空格。
ControlStatements:在控制語句(for/if/while…)的(前面加空格。
Always:總會在(前面加空格。
SpaceBeforeParens-ControlStatements
SpaceInEmptyParentheses (bool)
是否在()裏面插入一個空格。默認false。
SpacesBeforeTrailingComments (unsigned)
在尾部//註釋前面加幾個空格。
SpacesBeforeTrailingComments-3
SpacesInAngles (bool)
是否在後邊和>前邊插入空格,默認爲false。
SpacesInAngles-true
SpacesInContainerLiterals (bool)
@[]裏面,是否在 [ 後和 ] 前加空格。默認爲true。
SpacesInContainerLiterals-true
SpacesInParentheses (bool)
是否在(後面和)前面加空格,默認爲false。
SpacesInParentheses-true
當項目裏面有多種語言時,咱們能夠分別設置樣式:
---
# 咱們默認用 LLVM 樣式, 縮進寬度爲4。
BasedOnStyle: LLVM
IndentWidth: 4
---
Language: Cpp
# C++ 設置星號左對齊。
PointerAlignment: Left
---
Language: JavaScript
# JavaScript 每行字符限制設置爲100。
ColumnLimit: 100
---
Language: Proto
# 不格式化Proto文件。
DisableFormat: true
...
這個是我在用的.clang-format文件。你們能夠下載下來本身修改一下再用。