Xcode代碼格式化教程,可自定義樣式

 

來源: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文件。你們能夠下載下來本身修改一下再用。

相關文章
相關標籤/搜索