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

下载源代码

ClangFormat-Xcode是一个开源项目,所以先下载源代码:

https://github.com/travisjeffery/ClangFormat-Xcode

安装

项目的README.md上面如是说:

... build and run ClangFormat, restart Xcode.

意思就是:编译 > 运行 > 重启Xcode

使用自定义Style

如何使用,包括怎么设置快捷键,github上面写得很清楚了。这里讲一下怎么使用自定义Style:

  1. 在代码根目录下添加一个名为“.clang-format”的文本文件,在其中设置自定义参数。
    • 在对代码文件进行格式化的时候,插件会从代码文件所在的目录开始,往上一级一级地检索.clang-format,因此把文件放在根目录是最省事的做法;
    • 在ClangFormat-Xcode源代码的根目录下就有一个.clang-format文件的范例;
    • .clang-format在系统中是一个隐藏文件。
  2. 在Xcode的Clang Format菜单中勾选“File”菜单项。

推荐参数

下面是我们项目在用的设置参数,用文本编辑器打开.clang-format文件,直接粘贴进去就行:

BasedOnStyle: LLVM

# 不限定每行代码的最大长度
ColumnLimit: 0

# 不自动清除代码中的空行
MaxEmptyLinesToKeep: 99

# 按照LLVM Style调整{}的位置即可

# LLVM Style对C++的命名空间不缩进

# 对C++的可见性关键字(public、protected和private)不缩进
AccessModifierOffset: -4

# 缩进统一使用4个空格代替制表符(Tab)
UseTab: Never
IndentWidth: 4

# 在@property后加空格
ObjCSpaceAfterProperty: true

# LLVM Style会在参数类型和名称之间加空格,类型和*号之间加空格,*号贴近参数名

以上参数的主要作用是:

1、排版风格以“LLVM Style”为基础,在其之上进行细微调整,减少设置的复杂度;

2、关闭掉一些可能会降低代码可读性的设置,比如:

  • 不限定每行代码的最大长度,以免因为自动换行而破坏注释的排版;
  • 不自动清除代码中的空行,以免破坏代码的段落布局。

3、调整{}的位置;

4、调整缩进,比如:

  • 对C++的命名空间不缩进;
  • 对C++的可见性关键字(public、protected和private)不缩进;
  • 缩进统一使用4个空格代替制表符(Tab)。

5、调整空格,比如:

  • 清理行末位多余的空格;
  • 在@property后加空格;
  • 参数类型和名称之间的空格。

其他一些经验技巧

最后分享一下我们在使用Clang Format过程中的一些经验技巧:

  1. 对于接口文件(.h文件),用上面的推荐参数格式化即可;
  2. 对于实现的代码(.m和.mm文件),可以先用推荐参数格式化,再用Xcode的Re-Index调整缩进;
  3. 完美!

在Xcode中使用Clang Format的更多相关文章

  1. Clang Format

    1,最近项目代码要求规范化,在网上找了个Xcode插件:Clang Format ,下载地址:https://github.com/travisjeffery/ClangFormat-Xcode 2, ...

  2. clang format 官方文档自定义参数介绍(中英文)

    官方文档:http://clang.llvm.org/docs/ClangFormatStyleOptions.html 中文 在代码中配置样式 当使用 clang::format::reformat ...

  3. 解决cocos2dx在Xcode中运行时报:convert: iCCP: known incorrect sRGB profile 的问题

    解决cocos2dx在Xcode中运行时报:convert: iCCP: known incorrect sRGB profile 的问题 本文的实践来源是参照了两个帖子完成的: http://dis ...

  4. Xcode中Objc动态调用方法同时避免警告的几个办法

    我们在Xcode中使用objc写代码的时候往往会碰到动态调用方法的时候. 如果是静态调用这很常见,不会有任何问题: [self performSelector:@selector(method)]; ...

  5. 盘点Xcode中开发者最喜爱的十大开源插件

    Xcode IDE拥有着诸如导航.重构.校准等众多非常高大上的工具,而予以辅助的插件更是在Xcode的基础上对相关功能进行改进与扩展.在应用开发过程中,通过开源包管理器Alcatraz对插件进行安装管 ...

  6. Xcode 中配置 clang-format 格式化 C++ 代码

    Xcode 自带的代码格式化功能(control + I)很有限,其 "格式化" 仅限于设置缩进,代码里面的格式是不会处理的.所以需要借助额外的工具来完成代码的美化. clang- ...

  7. 在XCode中使用XCTest

    测试驱动开发并不是一个很新鲜的概念了.在我最开始学习程序编写时,最喜欢干的事情就是编写一段代码,然后运行观察结果是否正确.我所学习第一门语言是c语言,用的最多的是在算法设计上,那时候最常做的事情就是编 ...

  8. iOS开发时,在Xcode中添加多个Targets进行版本控制

    在iOS开发中,很可能有以下场景:需要开发多个版本,或因需区分收费版,免费版,或因为网络环境需要区分测试版,发布版,或因渠道不同需要区分企业版,AppStore版等等.解决办法无非就是CheckOut ...

  9. 在Xcode中使用Git进行源码版本控制

    http://www.cocoachina.com/ios/20140524/8536.html 资讯 论坛 代码 工具 招聘 CVP 外快 博客new 登录| 注册   iOS开发 Swift Ap ...

随机推荐

  1. [Mime] MimeReader--读取Mime的帮助类 (转载)

    点击下载 MimeReader.rar 这个类是关于MimeReader的帮助类看下面代码吧 /// <summary> /// 类说明:Assistant /// 编 码 人:苏飞 // ...

  2. .NET平台下几种SOCKET模型的简要性能供参考

    转载自:http://www.cnblogs.com/asilas/archive/2006/01/05/311309.html .NET平台下几种SOCKET模型的简要性能供参考 这个内容在cnbl ...

  3. 监听EditText的变化

    http://liangruijun.blog.51cto.com/3061169/729505 之前博客上的有关EditText的文章,只是介绍EditText的一些最基本的用法,这次来深入学习一下 ...

  4. angularjs小知识

    字符串和对象的转化  :angular.fromJson(jsonStr) 对象转字符串 :angular.toJson(obj) jsonStr:json字符串 obj:对象

  5. Objective-C发展历史

    Objective-C发展历史 苹果图标由来: 被咬了一口苹果的LOGO是为了纪念计算机科学的创始人阿兰· 麦席森· 图灵.当年图灵由于身为同性恋者,被强行 "治疗",在被迫注射大 ...

  6. 简单的完全背包HDU1114

    今天广州下雨啦,不过没关系啦,反正我最近也都在刷题学习算法. 昨天做了五题01背包,今天还是背包,不过是完全背包,估计做动态规划要持续好一段时间,一开始选了一道简单题目啦. HDU1114,看了小一段 ...

  7. 3D Game Programming with directx 11 习题答案 8.3

    第八章 第三题 1.将flare.dds和flarealpha.dds拷贝到工程目录 2.创建shader resource view HR(D3DX11CreateShaderResourceVie ...

  8. javascript 中的数据驱动页面模式

    前段时间一直在想前端MVC的意义.这个话题仁者见仁,但是MVC的使用方法给我提了一个管理数据的有意思的想法--数据管理和数据驱动页面.我们以前的思路一直是事件驱动页面,事件驱动页面合乎逻辑而且节约代码 ...

  9. sass学习--什么是sass

    1.预备知识--什么是 CSS 预处理器 CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件,然后开发者就只要使用这 ...

  10. node.Js学习-- 创建服务器简要步骤

    1.创建项目目录 mkdir ningha(文件夹名)npm init 初始化项目  获得package.json 2..在node.Js命令行操作进入到文件所在目录 3.输入browser-sync ...