超詳細的Xcode代碼格式化教程,可自訂樣式

來源:互聯網
上載者:User

標籤:cin   ati   limit   檔案   ever   為我   uid   white   gui   

為什麼要格式化代碼

當團隊內有多人開發的時候,每個人寫的代碼格式都有自己的喜好,也可能會忙著寫代碼而忽略了格式的問題。

在之前,我們可能會寫完代碼後,再一點一點去調格式,很浪費時間。

有了ClangFormat外掛程式後,就可以一鍵把代碼格式化成統一的樣式,不僅節省了時間,也使得代碼更規範。我們還可以定製自己喜歡的樣式。

安裝ClangFormat外掛程式

可以手動安裝(下載GitHub項目編譯),也可以用Alcatraz(外掛程式管理器)安裝,都很簡單,具體可以看我的文章《Xcode方便開發的外掛程式推薦》。

裝好後是這樣的,我們可以看到它內建了LLVM、Google、Chromium、Mozilla、WebKit五種樣式。

使用方法

通過菜單可以看到,它可以格式化選中的文字們,或者格式化選擇的檔案們。下面示範下LLVM樣式下的格式化:

使用自訂樣式

1、需要先把上面菜單裡面的File選中,因為我們需要讓它用我們自己寫的設定檔。

2、在工程目錄下建立設定檔.clang-format檔案並編輯。.clang-format檔案用的是YAML格式:裡面要用的欄位在後面會詳細解釋。

 

key1: value1# 一個注釋key2: value2

當然如果你已經有.clang-format檔案的話,直接拖動到項目根目錄也可以。 文章結尾有我在用的.clang-format檔案。

溫馨提示:.clang-format檔案是隱藏檔案,預設是看不見的。需要在終端輸入以下命令:

 

//顯示 隱藏檔案defaults write com.apple.finder AppleShowAllFiles -bool truekillall Finder//隱藏www.90168.org 隱藏檔案defaults write com.apple.finder AppleShowAllFiles -bool falsekillall Finder

全域配置

上面我們是在項目根目錄建立的.clang-format檔案,每次建新項目都要有。如果你想讓所有的項目公用一個檔案,把.clang-format檔案放在所有項目都在的一個最大根目錄下就可以了。

讓一段代碼不受格式化影響

如果想讓一段代碼不受格式化影響,需要將他們包含在// clang-format off 和 // clang-format on這兩句注釋之間,這樣這段代碼就不會被格式化,但是這兩句注釋本身是會被格式化的。

設定快速鍵

首先你可以選中菜單中的 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)www.90168.org 前面額外需要加的縮排長度。預設為0。

AlignConsecutiveAssignments (bool)

如果是true,把連續的賦值操作按=對齊,預設為false。

AlignConsecutiveDeclarations (bool)

如果是true,把連續行的變數名對齊。預設為false。

AlignTrailingComments (bool)

如果是true,對齊尾部注釋。預設為false。

AllowShortCaseLabelsOnASingleLine (bool)

如果是true, 允許一個case在一行寫完,預設為false。

BreakBeforeBraces (string)

大括弧前面是否換行,具體可選值看文檔。一般用Allman,代表所有大括弧都換行。

ColumnLimit (unsigned)

每行最多多少個字元,0不限制

IndentWidth (unsigned)

縮排寬度,預設為2,但是我們一般設定為4。

IndentCaseLabels (bool)

switch的case縮排寬度,一般用true。預設為false,case會和switch對齊。

KeepEmptyLinesAtTheStartOfBlocks (bool)

是否保留block裡面開始的空行們。預設為true。

MaxEmptyLinesToKeep (unsigned)

最多可以有連續幾行空行,預設為1。

ObjCBlockIndentWidth

OC的block裡面的縮排寬度,預設為4。

ObjCSpaceAfterProperty (bool)

OC裡面,是否在@property後加空格。預設為false。

OC裡面,是否在Protocol名字列表前面加空格,預設為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:總會在(前面加空格。

SpaceInEmptyParentheses (bool)

是否在()裡面插入一個空格。預設false。

SpacesBeforeTrailingComments (unsigned)

在尾部//注釋前面加幾個空格。

SpacesInAngles (bool)

是否在<後邊和>前邊插入空格,預設為false。

SpacesInContainerLiterals (bool)

@[]裡面,是否在 [ 後和 ] 前加空格。預設為true。

SpacesInParentheses (bool)

是否在(後面和)前面加空格,預設為false。

當項目裡面有多種語言時,我們可以分別設定樣式:

 

---# 我們預設用 LLVM 樣式, 縮排寬度為4。BasedOnStyle: LLVMIndentWidth: 4---Language: Cpp# C++ 設定星號靠左對齊。PointerAlignment: Left---Language: JavaScript# JavaScript 每行字元限制設定為100。ColumnLimit: 100---Language: Proto# 不格式化Proto檔案。DisableFormat: true...

這個是我在用的.clang-format檔案。大家可以下載下來自己修改一下再用。

超詳細的Xcode代碼格式化教程,可自訂樣式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.