超详细的Xcode代码格式化教程,可自定义样式。
超详细的Xcode代码格式化教程,可自定义样式。
当团队内有多人开发的时候,每个人写的代码格式都有自己的喜好,也可能会忙着写代码而忽略了格式的问题。
在之前,我们可能会写完代码后,再一点一点去调格式,很浪费时间。
有了ClangFormat
插件后,就可以一键把代码格式化成统一的样式,不仅节省了时间,也使得代码更规范。我们还可以定制自己喜欢的样式。
安装ClangFormat插件
可以手动安装(下载GitHub项目编译),也可以用Alcatraz(插件管理器)安装,都很简单,具体可以看我的文章《Xcode方便开发的插件推荐》。
装好后是下图这样的,我们可以看到它内置了LLVM
、Google
、Chromium
、Mozilla
、WebKit
五种样式。

使用方法
通过菜单可以看到,它可以格式化选中的文字们,或者格式化选择的文件们。下面演示下LLVM
样式下的格式化:

使用自定义样式
1、需要先把上面菜单里面的File选中,因为我们需要让它用我们自己写的配置文件。

2、在工程目录下创建配置文件.clang-format
文件并编辑。.clang-format
文件用的是YAML
格式:里面要用的字段在后面会详细解释。
key1: value1
# 一个注释
key2: value2

当然如果你已经有.clang-format
文件的话,直接拖动到项目根目录也可以。
文章结尾有我在用的.clang-format
文件。
温馨提示:.clang-format
文件是隐藏文件,默认是看不见的。需要在终端输入以下命令:
//显示 隐藏文件
defaults write com.apple.finder AppleShowAllFiles -bool true
killall Finder
//隐藏 隐藏文件
defaults write com.apple.finder AppleShowAllFiles -bool false
killall Finder
全局配置
上面我们是在项目根目录创建的.clang-format
文件,每次建新项目都要有。如果你想让所有的项目公用一个文件,把.clang-format
文件放在所有项目都在的一个最大根目录下就可以了。
让一段代码不受格式化影响
如果想让一段代码不受格式化影响,需要将他们包含在// clang-format off
和 // clang-format on
这两句注释之间,这样这段代码就不会被格式化,但是这两句注释本身是会被格式化的。

设置快捷键
首先你可以选中菜单中的 Enable Format On Sava
,把它点Disable Format On Sava
,这样以后每次按⌘+S
保存文件时就可以自动格式化了。

我们也可以给一些菜单设置快捷键,使用的时候不用每次去选择各级菜单了。比如我们给Format Selected Text
设置快捷键:

你也可以为其他菜单设置快捷键,其实呢,我用Format Selected Text
的时候很少,每次都是想格式化的时候直接⌘+S
就行了哈哈哈。
配置文件中属性的含义讲解
下面说一些配置文件的常用的参数介绍,其他的可以看官方文档:Clang-Format Style Options,其中小括号内代表他需的是什么类型的值。
BasedOnStyle (string)
基于哪种样式。除了文件中写出的定制属性外,别的没定制的属性都默认用这种样式的。
可选值有五种:LLVM
:一种遵循LLVM coding standards的样式。Google
:一种遵循Google’s C++ style guide的样式。Chromium
:一种遵循Chromium’s style guide的样式。Mozilla
:一种遵循Mozilla’s style guide的样式。WebKit
:一种遵循WebKit’s style guide的样式。
AccessModifierOffset (int)
访问修饰词 (比如public) 前面额外需要加的缩进长度。默认为0。
AlignConsecutiveAssignments (bool)
如果是true,把连续的赋值操作按=对齐,默认为false。

AlignConsecutiveDeclarations (bool)
如果是true,把连续行的变量名对齐。默认为false。

AlignTrailingComments (bool)
如果是true,对齐尾部注释。默认为false。

AllowShortCaseLabelsOnASingleLine (bool)
如果是true, 允许一个case在一行写完,默认为false。

BreakBeforeBraces (string)
大括号前面是否换行,具体可选值看文档。一般用Allman,代表所有大括号都换行。

ColumnLimit (unsigned)
每行最多多少个字符,0不限制
IndentWidth (unsigned)
缩进宽度,默认为2,但是我们一般设置为4。

IndentCaseLabels (bool)
switch的case缩进宽度,一般用true。默认为false,case会和switch对齐。
KeepEmptyLinesAtTheStartOfBlocks (bool)
是否保留block里面开始的空行们。默认为true。

MaxEmptyLinesToKeep (unsigned)
最多可以有连续几行空行,默认为1。

ObjCBlockIndentWidth
OC的block里面的缩进宽度,默认为4。
ObjCSpaceAfterProperty (bool)
OC里面,是否在@property后加空格。默认为false。

ObjCSpaceBeforeProtocolList (bool)
OC里面,是否在Protocol名字列表前面加空格,默认为true。

PointerAlignment (string)
指针的位置。默认为Right。
可选值:
Left:NSString* name
Middle:NSString * name
Right:NSString *name
SpaceBeforeAssignmentOperators (bool)=
前面是否有空格。默认为true。
SpaceBeforeParens (string)
是否在(
前面加空格。默认ControlStatements。
可选值:
Never: 从来不在(
前面加空格。
ControlStatements:在控制语句(for/if/while...)的(
前面加空格。
Always:总会在(
前面加空格。

SpaceInEmptyParentheses (bool)
是否在()
里面插入一个空格。默认false。
SpacesBeforeTrailingComments (unsigned)
在尾部//注释前面加几个空格。

SpacesInAngles (bool)
是否在<
后边和>
前边插入空格,默认为false。

SpacesInContainerLiterals (bool)@[]
里面,是否在 [
后和 ]
前加空格。默认为true。

SpacesInParentheses (bool)
是否在(
后面和)
前面加空格,默认为false。

当项目里面有多种语言时,我们可以分别设置样式:
---
# 我们默认用 LLVM 样式, 缩进宽度为4。
BasedOnStyle: LLVM
IndentWidth: 4
---
Language: Cpp
# C++ 设置星号左对齐。
PointerAlignment: Left
---
Language: JavaScript
# JavaScript 每行字符限制设置为100。
ColumnLimit: 100
---
Language: Proto
# 不格式化Proto文件。
DisableFormat: true
...
这个是我在用的.clang-format文件。大家可以下载下来自己修改一下再用。
欢迎关注 我 和我的专题:iOS技术交流,查看更多好文章。
欢迎加入iOS技术交流群:244122891,这里有很多爱学习爱交流的人。
原文链接:http://www.jianshu.com/p/a725e24d7835
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
超详细的Xcode代码格式化教程,可自定义样式。的更多相关文章
- 超详细的Xcode代码格式化教程,可自定义样式
为什么要格式化代码 当团队内有多人开发的时候,每个人写的代码格式都有自己的喜好,也可能会忙着写代码而忽略了格式的问题. 在之前,我们可能会写完代码后,再一点一点去调格式,很浪费时间. 有了ClangF ...
- Xcode代码格式化教程,可自定义样式
来源:iOS_小松哥 链接:http://www.jianshu.com/p/a725e24d7835 为什么要格式化代码 当团队内有多人开发的时候,每个人写的代码格式都有自己的喜好,也可能会忙着写代 ...
- 超详细!Github团队协作教程(Gitkraken版)
超详细!Github团队协作教程(Gitkraken版) 一.前期工作 1. 在 Github 上创建 organization step1. 登录Github网站,点击右上角头像,选择 " ...
- iOS开发-xCode代码格式化xAlign
xCode默认是可以进行代码格式化的,能满足基础开发需求,如果想要个性一些代码对齐方式宏对齐,等号对齐,属性对齐,xAlign就提供了以上三种功能,参考文中效果~ 基础效果 等号对齐: 属性对齐: 宏 ...
- hadoop入门篇---超详细hadoop服务器环境配置教程
虚拟机以及Linux系统安装在之前的两篇分享中已经详细的介绍了方法,并且每一步的都配图了.如果有朋友还是看不懂,那我也爱莫能助了.本篇主要就hadoop服务器操作系统配置进行详细说明,hadoop安装 ...
- 【智能算法】粒子群算法(Particle Swarm Optimization)超详细解析+入门代码实例讲解
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 算法起源 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由E ...
- 超详细的FreeRTOS移植全教程——基于srm32
### 准备 在移植之前,我们首先要获取到FreeRTOS的官方的源码包.这里我们提供两个下载链接: > 一个是官网:http://www.freertos.org/ > 另外一个是代码托 ...
- 微信支付接口--超详细带注释代码--Demo
如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 如果对你有帮助的话麻烦点个[推荐]~最好还可以follow一下我的GitHub~感谢观看! 微 ...
- 超详细的RNN代码实现(tensorflow)
一.学习单步的RNN:RNNCell 如果要学习TensorFlow中的RNN,第一站应该就是去了解“RNNCell”,它是TensorFlow中实现RNN的基本单元,每个RNNCell都有一个cal ...
随机推荐
- Photoshop CS6 快捷键
1.工具箱 移动工具 [V]矩形.椭圆选框工具 [M]套索.多边形套索.磁性套索 [L]快速选择工具.魔棒工具 [W] 裁剪.透视裁剪.切片.切片选择工具 [C]吸管.颜色取样器.标尺.注释.12 ...
- Shell概述
一,Shell原理
- ABAP DESCRIBE语句
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 别名alias
alias #查看已设置的别名 alias 别名='原命令' #暂时设定别名(重启失效):alias ls='ls --color=never' unalias 别名 #删除别名 设置别名永久生效 ...
- Python基础学习笔记(十一)函数、模块与包
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-functions.html 3. http://www.liao ...
- HDU 1247 Hat's Words (map+string)
Hat’s Words Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- MongoDB资料汇总
MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. 它的特点是高性能.易部署.易使用,存储数据非常方便.主要功能特性有: 面向集合存 ...
- w3c与微软(IE)事件注册区别 -Tom
严格来说,有2中不同的模型:W3C模型和微软模型,除IE之外W3C模型支持所有的现代浏览器,而微软模型只支持IE,使用W3C模型的代码如下: // 格式:target.addEventListener ...
- Linux命令之nslookup
http://www.computerhope.com/unix/unslooku.htm About nslookup The nslookup command is used to query i ...
- OpenGL的GLUT事件处理(Event Processing)窗口管理(Window Management)函数[转]
GLUT事件处理(Event Processing)窗口管理(Window Management)函数 void glutMainLoop(void) 让glut程序进入事件循环.在一个glut程序中 ...