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: LLVMIndentWidth: 4

所有可用的配置参数可在其 文档 Clang-Format Style Options 中查看。一般指定一个喜欢的预设风格即可。

clang-format 的安装

$ brewinstallclang-format

检查安装:

$ clang-format --versionclang-formatversion8.0.0(tags/google/stable/2019-01-18)

虽然安装好了,但它是命令行工具,要在 Xcode 中使用,还需要借助 macOS 自带的 Automator 工具。

添加 Automator 服务

打开 Automator 选择 "Quick Action"。

通过 Automator 创建 "Quick Action"

左侧 Library 中搜索 "Run Shell Script" 并拖动到右侧。在脚本编辑框中输入以下内容:

exportPATH=/usr/local/bin:$PATHclang-format

通过执行脚本实现 clang-format 服务的添加

同时记得勾选上 "Output replaces selected text",然后保存并输入保存的名称,比如 clang-format 。

至此一个服务便已添加好。

使用

在当前用户的根目录 ~ 放置一个 .clang-format 文件,

$ touch ~/.clang-format

在其中指定 C++ 格式化相关的配置,比如:

BasedOnStyle: GoogleIndentWidth: 2

当然,除了配置文件,clang-format 的格式化参数也可通过 shell 的方式传递,比如上面在添加服务时输入的脚本中,带上格式化的参数:

exportPATH=/usr/local/bin:$PATHclang-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)

如果有想学习编程的初学者,可来我们的C/C++技术学习扣qun的哦:58,934,83-89里面免费送整套系统的C/C++教程!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文地址:http://www.lm1024.xyz/?p=40 1、写该脚本的原因 自从xcode8以后苹果禁止...
    半城coding阅读 5,673评论 0 3
  • Xcode中的Re-Indent,顾名思义,只是一个调整缩进的功能,完全依赖它来进行代码格式化显然不够用。我们使用...
    杜修杏阅读 8,857评论 2 0
  • 我是一个如今没有心情写东西的人,我的大脑一片空白,听首歌吧,谁知道呢,我也许能得到我没有想到的,或许失去的
    秦宛_ecff阅读 1,170评论 0 0
  • Hello,大家好!今天我们来学习雏菊的画法。雏菊是一种非常可爱的小花花,它清新,唯美,优雅而不张扬。相信看过电影...
    林逸葵阅读 6,377评论 5 18
  • 措辞不当罂粟来,只当人生过烟雨,蓦然珊珊来我怀,烟飞云息荡然忖。
    TIEDENG阅读 1,027评论 1 1