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

相关资源

Xcode 中配置 clang-format 格式化 C++ 代码的更多相关文章

  1. 在Xcode中使用Clang Format

    Xcode中的Re-Indent,顾名思义,只是一个调整缩进的功能,完全依赖它来进行代码格式化显然不够用.我们使用了一个叫做ClangFormat-Xcode的插件,配合Re-Indent一起来做代码 ...

  2. XCODE中配置使用boost

    1.  开发平台:os x 2.  boost安装目录: 3.  xcode中配置:    4. 测试  

  3. 在QtCreater中配置Artistic Style格式化Qt程序源代码!!

    Qt很吸引人,可能是我对Qt开发工具QtCreater不熟悉,只发现里面提供了一个快捷键:"ctrl+i",很多人说这就是格式化代码快捷键,我发现这仅仅是代码缩进,并不是真正意义上 ...

  4. python中使用%与.format格式化文本

    初学python,看来零零碎碎的格式化文本的方法,总结一下python中格式化文本的方法.使用不当的地欢迎指出谢谢. 1.首先看使用%格式化文本 常见的占位符: 常见的占位符有: %d 整数 %f 浮 ...

  5. xcode中使用正则表达式来搜索替换代码

    有这样的需求: 类似于 GLOBAL_STR(@"请继续添加"); 这样的代码,需要批量修改为: GLOBAL_STR(@"请继续添加", nil); 这里使用 ...

  6. WPF中XAML中使用String.Format格式化字符串示例

    货币格式 <TextBlock Text="{Binding Price, StringFormat={}{0:C}}" /> // $123.46 货币格式,一位小数 ...

  7. Xcode 中 Git 的配置与使用

    Xcode 中 Git 的配置与使用主要围绕下面几个问题展开阐述: 问题1,如何在Xcode中创建本地代码库,并添加和提交代码到本地代码库? 问题2,如何在Xcode中提交推送给远程服务器代码库? 问 ...

  8. Git在Xcode中的配置与使用常见问题总结

    书接上回提出的Git在Xcode中的配置与使用常见问题4个问题 问题1,如何在Xcode中创建代码库,并添加和提交代码到代码库? 问题2,如何在Xcode中提交推送给远程服务器代码库? 问题3,如何在 ...

  9. Xcode中添加代码块的方式

    在写代码的过程中,经常会有重复的代码(比如说,cell的使用),当然了复制粘贴也不是不行,但是Xcode提供了一个很方便的东西. 1.在Xcode右下角你会看到有一个{}的东西,这里是一些常用的代码块 ...

随机推荐

  1. Django项目BBS博客论坛

    BBS 项目开发逻辑梳理 第一步:先进行数据库设计 数据库设计规则是: 1.先创建基表:用户表.站点表.文章表.标签表.分类表.文章2标签第三张关系表.点赞点踩表.评论表 2.书写表中的基本含有的字段 ...

  2. c++之程序流程控制

    三种程序运行结构:顺序结构.选择结构.循环结构. 顺序结构:程序按顺序执行,不发生跳转. 选择结构:依据条件执行不同的语句. 循环结构:判断条件是否满足,循环多次执行某段代码. 一.选择结构 //单行 ...

  3. Python代码编写规范,你真的会吗?

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:yangjiajia123456  最近两年的工作都是和运维相关,有时 ...

  4. springboot windows10风格 activiti 整合项目框架源码 shiro 安全框架 druid

     官网:www.fhadmin.org  此项目为Springboot工作流版本 windows 风格,浏览器访问操作使用,非桌面应用程序. 1.代码生成器: [正反双向](单表.主表.明细表.树形表 ...

  5. 由于ie浏览器ajax缓存 导致layui table表格重载失败的解决办法

    where: { time:new Date()//增加一个数据接口的额外参数→时间戳 }

  6. 用百度大脑技术让AI做回新闻主播!

    实现效果: 利用百度新闻摘要能力和微信小程序,快速抽取新闻摘要内容并进行语音播报,让AI做回新闻主播!本文主要介绍小程序功能开发实现过程,分享主要功能实现的子程序模块,都是干货哦!! 想了解pytho ...

  7. ASP.NET Core身份验证

    asp.net core 身份验证 本文旨在演示如果使用内置的 identity 实现 asp.net core 的身份验证,不会进行其它扩展.本文将通过最简单的代码演示如何进行登录和身份验证操作. ...

  8. ReactNative: 使用弹出框组件ActionSheetIOS组件

    一.简介 在上一篇文章中,详细介绍了对话框组件,除此之外,React-Native系统还给开发者提供了一个弹框框组件ActionSheetIOS组件,它的弹出方式与对框框不同,它是从底部弹出,与iOS ...

  9. 【转载】Docker registry仓库历史镜像批量清理

    前言 在jenkins CI/CD流水线中以自动打包并push镜像的方式运行了一段时间之后, docker registry中堆积的历史镜像数量极多,磁盘空间告急,为此,有必要定期做镜像的清理,并释放 ...

  10. SAP 下钻功能大全

    FORM ALV_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM "作为reuse_alv_grid_display的事件i_callback_user_c ...