1. 程式人生 > >Xcode 中配置 clang-format 格式化 C++ 程式碼

Xcode 中配置 clang-format 格式化 C++ 程式碼

<

Xcode 自帶的程式碼格式化功能(control + I)很有限,其 “格式化” 僅限於設定縮排,程式碼裡面的格式是不會處理的。所以需要藉助額外的工具來完成程式碼的美化。

clang-format 便是可選的工具之一,它可用來格式化 C/C++/Java/JavaScript/Objective-C/Protobuf/C# 等程式碼。

其內建了多種預設的程式碼風格,分別有 LLVM, Google, Chromium, Mozilla, WebKit。

可通過新增 .clang-format 檔案來進行配置。優先使用專案中的 .clang-format

檔案,然後會查詢系統中存在的 .clang-format 檔案。

一個配置檔案的示例:

BasedOnStyle: LLVM
IndentWidth: 4  

所有可用的配置引數可在其文件 Clang-Format Style Options 中檢視。一般指定一個喜歡的預設風格即可。

clang-format 的安裝

$ brew install clang-format

檢查安裝:

$ clang-format --version
clang-format version 8.0.0 (tags/google/stable/2019-01-18)

雖然安裝好了,但它是命令列工具,要在 Xcode 中使用,還需要藉助 macOS 自帶的 Automator 工具。

新增 Automator 服務

開啟 Automator 選擇 "Quick Action"。

通過 Automator 建立 "Quick Action"

左側 Library 中搜索 "Run Shell Script" 並拖動到右側。在指令碼編輯框中輸入以下內容:

export PATH=/usr/local/bin:$PATH
clang-format

通過執行指令碼實現 clang-format 服務的新增

同時記得勾選上 "Output replaces selected text",然後儲存並輸入儲存的名稱,比如 clang-format

至此一個服務便已新增好。

使用

在當前使用者的根目錄 ~

放置一個 .clang-format 檔案,

$ touch ~/.clang-format

在其中指定 C++ 格式化相關的配置,比如:

BasedOnStyle: Google
IndentWidth: 2

當然,除了配置檔案,clang-format 的格式化引數也可通過 shell 的方式傳遞,比如上面在新增服務時輸入的指令碼中,帶上格式化的引數:

export PATH=/usr/local/bin:$PATH
clang-format -style="{IndentWidth: 4, TabWidth: 4, UseTab: Never,   BreakBeforeBraces: Stroustrup}"

開啟 Xcode,選中需要格式化的程式碼並右鍵喚出選單。選擇 Services-> clang-format,這裡 Services 中的名稱即為前面步驟中儲存的 Services 名稱。

通過選單進行格式化

新增快捷鍵

顯然右鍵這種方式不夠便捷,進一步新增快捷鍵來實現更加方便的程式碼格式化。因為 Xcode 中格式化程式碼預設的快捷鍵為 control + I,不防我們就設定 clang-format 這個服務的快捷鍵為這個按鍵組合。

開啟系統的首選項設定(可通過在 SpotLight 中搜索 "system preference"),然後開啟鍵盤設定 "Kyeboard" 並切換到 "Shortcuts" 標籤。

選中左側 "App Shortcuts" 然後為 "Xcode" 繫結 control + I 執行 clang-format

為 `clang-format` 新增系統快捷鍵

然後便可通過快捷鍵方便地進行程式碼格式化了。

通過快捷鍵進行格式化

其他工具

存在一些其他以外掛形式的工具,同樣能達到使用 clang-format 格式化程式碼的目的,比如 travisjeffery/ClangFormat-Xcode,但不支援 Xcode 9+,可安裝其替代版 V5zhou/ZZClang-format

該外掛安裝好後,支援在檔案儲存時自動格式化,比較方便。

但因為是來自社群的外掛,需要先將 Xcode 去掉簽名 (unsign),參見 inket/update_xcode_plugins。

相關資源

  • Clang 9 documentation
  • Code Beautifier in Xcode
  • The Chromium Projects - Mac Development
  • travisjeffery/ClangFormat-Xcode