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. Python之工作方向

    "python基础-->(函数/面向对象/网络编程(scoket套接字)/并发编程(mutiprocessing)) "运维+web开发-->页面展示(django/f ...

  2. Wonder暂停开发,开始写书

    公告 大家好,我们决定暂时停止开发Wonder,但会继续维护当前的Wonder版本(如继续维护官网.在线编辑器.QQ群等). 我们当前的主要任务是 写书:基于Wonder 1.0版本的开发经验,写一本 ...

  3. 【CV现状-3.1】图像分割

    #磨染的初心--计算机视觉的现状 [这一系列文章是关于计算机视觉的反思,希望能引起一些人的共鸣.可以随意传播,随意喷.所涉及的内容过多,将按如下内容划分章节.已经完成的会逐渐加上链接.] 缘起 三维感 ...

  4. 使用docker运行dotnetcore站点

    使用docker运行netcore站点 1.新建一.netcore测试站点,dotnet publish 发布到publish目录下 2.编写Dockerfile文件 3.打包上传到centos服务器 ...

  5. wx-icon和progress

    基本内容 index.wxml <!--index.wxml--> <view class="container"> <!--icon text pr ...

  6. GeoServer 2.15.0版本跨域问题解决方法

    geoserver默认不开启跨域设置,开启步骤如下: 1.修改配置文件web.xml,该配置文件的路径如下 \webapps\geoserver\WEB-INF\web.xml 2.搜索:cross- ...

  7. 浅析椭圆曲线加密算法(ECC)

    本文首发于先知社区,原文链接:https://xz.aliyun.com/t/6295 数学基础 黎曼几何中的"平行线" 欧几里得<几何原本>中提出五条公设: 过相异两 ...

  8. Csharp: TreeList Drag and Drop

    /// <summary> /// https://www.codeproject.com/articles/3225/treelistview /// https://www.codep ...

  9. 针对windows系统如何解决openssl_pkey_export(): cannot get key from parameter 1这个问题

    为了解决这个问题我百度了很多方法,可是很多方法并没有效果. 方法一: 如果你安装的是phpstudy这个集成环境,那么 1.你就要去php拓展里面去打开php_opemssl中打开这个扩展. 2.去p ...

  10. SpringBoot集成swagger2.0

    最近项目里要用到SpringBoot + swagger,查了其他小伙伴们的资料,或多或少有点问题,在此我再梳理一遍. 1.maven依赖 <parent> <groupId> ...