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

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++教程婚度!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蘸秘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蝗茁,更是在濱河造成了極大的恐慌秘血,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件评甜,死亡現(xiàn)場(chǎng)離奇詭異灰粮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)忍坷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門粘舟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人佩研,你說我怎么就攤上這事柑肴。” “怎么了旬薯?”我有些...
    開封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵晰骑,是天一觀的道長。 經(jīng)常有香客問我绊序,道長硕舆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任骤公,我火速辦了婚禮抚官,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阶捆。我一直安慰自己凌节,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開白布洒试。 她就那樣靜靜地躺著倍奢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪垒棋。 梳的紋絲不亂的頭發(fā)上卒煞,一...
    開封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音捕犬,去河邊找鬼跷坝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛碉碉,可吹牛的內(nèi)容都是我干的柴钻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼垢粮,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼贴届!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蜡吧,我...
    開封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤毫蚓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后昔善,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體元潘,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年君仆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了翩概。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡返咱,死狀恐怖钥庇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咖摹,我是刑警寧澤评姨,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站萤晴,受9級(jí)特大地震影響吐句,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜店读,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一蕴侧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧两入,春花似錦净宵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至剃氧,卻和暖如春敏储,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背朋鞍。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來泰國打工已添, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留妥箕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓更舞,卻偏偏與公主長得像畦幢,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缆蝉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容

  • 原文地址:http://www.lm1024.xyz/?p=40 1宇葱、寫該腳本的原因 自從xcode8以后蘋果禁止...
    半城coding閱讀 1,704評(píng)論 0 3
  • Xcode中的Re-Indent,顧名思義刊头,只是一個(gè)調(diào)整縮進(jìn)的功能黍瞧,完全依賴它來進(jìn)行代碼格式化顯然不夠用。我們使用...
    杜修杏閱讀 3,484評(píng)論 2 0
  • 我是一個(gè)如今沒有心情寫東西的人原杂,我的大腦一片空白印颤,聽首歌吧,誰知道呢穿肄,我也許能得到我沒有想到的膀哲,或許失去的
    秦宛_ecff閱讀 170評(píng)論 0 0
  • Hello,大家好被碗!今天我們來學(xué)習(xí)雛菊的畫法某宪。雛菊是一種非常可愛的小花花锐朴,它清新兴喂,唯美,優(yōu)雅而不張揚(yáng)焚志。相信看過電影...
    林逸葵閱讀 2,082評(píng)論 5 18
  • 措辭不當(dāng)罌粟來衣迷,只當(dāng)人生過煙雨,驀然珊珊來我懷酱酬,煙飛云息蕩然忖壶谒。
    TIEDENG閱讀 147評(píng)論 1 1