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"

通過 Automator 創建 "Quick Action"

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

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

通過執行腳本實現 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` 添加系統快捷鍵

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

通過快捷鍵進行格式化

通過快捷鍵進行格式化

其他工具

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

該插件安裝好后,支持在文件保存時自動格式化,比較方便。

但因為是來自社區的插件,需要先將 Xcode 去掉簽名 (unsign),參見 inket/update_xcode_plugins

相關資源


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM