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。