Xcode 自帶的代碼格式化功能(?control?+?I?)很有限抖所,其 “格式化” 僅限于設(shè)置縮進(jìn),代碼里面的格式是不會(huì)處理的罗珍。所以需要借助額外的工具來完成代碼的美化糊秆。
clang-format?便是可選的工具之一,它可用來格式化 C/C++/Java/JavaScript/Objective-C/Protobuf/C# 等代碼。
其內(nèi)置了多種預(yù)設(shè)的代碼風(fēng)格缭保,分別有 LLVM, Google, Chromium, Mozilla, WebKit汛闸。
可通過添加?.clang-format?文件來進(jìn)行配置。優(yōu)先使用項(xiàng)目中的?.clang-format?文件艺骂,然后會(huì)查找系統(tǒng)中存在的?.clang-format?文件诸老。
一個(gè)配置文件的示例:
BasedOnStyle: LLVMIndentWidth: 4
所有可用的配置參數(shù)可在其?文檔 Clang-Format Style Options?中查看。一般指定一個(gè)喜歡的預(yù)設(shè)風(fēng)格即可钳恕。
clang-format 的安裝
$ brewinstallclang-format
檢查安裝:
$ clang-format --versionclang-formatversion8.0.0(tags/google/stable/2019-01-18)
雖然安裝好了别伏,但它是命令行工具,要在 Xcode 中使用,還需要借助 macOS 自帶的 Automator 工具。
添加 Automator 服務(wù)
打開 Automator 選擇 "Quick Action"往毡。
通過 Automator 創(chuàng)建 "Quick Action"
左側(cè) Library 中搜索 "Run Shell Script" 并拖動(dòng)到右側(cè)鼻疮。在腳本編輯框中輸入以下內(nèi)容:
exportPATH=/usr/local/bin:$PATHclang-format
通過執(zhí)行腳本實(shí)現(xiàn) clang-format 服務(wù)的添加
同時(shí)記得勾選上 "Output replaces selected text",然后保存并輸入保存的名稱府蔗,比如?clang-format?。
至此一個(gè)服務(wù)便已添加好。
使用
在當(dāng)前用戶的根目錄?~?放置一個(gè)?.clang-format?文件巩检,
$ touch ~/.clang-format
在其中指定 C++ 格式化相關(guān)的配置,比如:
BasedOnStyle: GoogleIndentWidth: 2
當(dāng)然注益,除了配置文件碴巾,clang-format 的格式化參數(shù)也可通過 shell 的方式傳遞,比如上面在添加服務(wù)時(shí)輸入的腳本中丑搔,帶上格式化的參數(shù):
exportPATH=/usr/local/bin:$PATHclang-format -style="{IndentWidth: 4, TabWidth: 4, UseTab: Never,? BreakBeforeBraces: Stroustrup}"
打開 Xcode厦瓢,選中需要格式化的代碼并右鍵喚出菜單。選擇?Services-> clang-format?啤月,這里 Services 中的名稱即為前面步驟中保存的 Services 名稱煮仇。
通過菜單進(jìn)行格式化
添加快捷鍵
顯然右鍵這種方式不夠便捷,進(jìn)一步添加快捷鍵來實(shí)現(xiàn)更加方便的代碼格式化谎仲。因?yàn)?Xcode 中格式化代碼默認(rèn)的快捷鍵為?control?+?I?浙垫,不防我們就設(shè)置?clang-format?這個(gè)服務(wù)的快捷鍵為這個(gè)按鍵組合。
打開系統(tǒng)的首選項(xiàng)設(shè)置(可通過在 SpotLight 中搜索 "system preference")郑诺,然后打開鍵盤設(shè)置 "Kyeboard" 并切換到 "Shortcuts" 標(biāo)簽夹姥。
選中左側(cè) "App Shortcuts" 然后為 "Xcode" 綁定?control?+?I?執(zhí)行?clang-format?。
為 `clang-format` 添加系統(tǒng)快捷鍵
然后便可通過快捷鍵方便地進(jìn)行代碼格式化了辙诞。
通過快捷鍵進(jìn)行格式化
其他工具
存在一些其他以插件形式的工具辙售,同樣能達(dá)到使用 clang-format 格式化代碼的目的,比如?travisjeffery/ClangFormat-Xcode?飞涂,但不支持 Xcode 9+旦部,可安裝其替代版?V5zhou/ZZClang-format
該插件安裝好后祈搜,支持在文件保存時(shí)自動(dòng)格式化,比較方便士八。
但因?yàn)槭莵碜陨鐓^(qū)的插件容燕,需要先將 Xcode 去掉簽名 (unsign)
如果有想學(xué)習(xí)編程的初學(xué)者,可來我們的C/C++技術(shù)學(xué)習(xí)扣qun的哦:58,934,83-89里面免費(fèi)送整套系統(tǒng)的C/C++教程婚度!