为什么要格式化代码

当团队内有多人开发的时候,每个人写的代码格式都有自己的喜好,也可能会忙着写代码而忽略了格式的问题。

在之前,我们可能会写完代码后,再一点一点去调格式,很浪费时间。

有了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 truekillall Finder//隐藏www.90168.org 隐藏文件defaults write com.apple.finder AppleShowAllFiles -bool falsekillall 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)www.90168.org 前面额外需要加的缩进长度。默认为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。

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: LLVMIndentWidth: 4---Language: Cpp# C++ 设置星号左对齐。PointerAlignment: Left---Language: JavaScript# JavaScript 每行字符限制设置为100。ColumnLimit: 100---Language: Proto# 不格式化Proto文件。DisableFormat: true...

这个是我在用的.clang-format文件。大家可以下载下来自己修改一下再用。

超详细的Xcode代码格式化教程,可自定义样式的更多相关文章

  1. 超详细的Xcode代码格式化教程,可自定义样式。

    超详细的Xcode代码格式化教程,可自定义样式. 为什么要格式化代码 当团队内有多人开发的时候,每个人写的代码格式都有自己的喜好,也可能会忙着写代码而忽略了格式的问题.在之前,我们可能会写完代码后,再 ...

  2. Xcode代码格式化教程,可自定义样式

    来源:iOS_小松哥 链接:http://www.jianshu.com/p/a725e24d7835 为什么要格式化代码 当团队内有多人开发的时候,每个人写的代码格式都有自己的喜好,也可能会忙着写代 ...

  3. 超详细!Github团队协作教程(Gitkraken版)

    超详细!Github团队协作教程(Gitkraken版) 一.前期工作 1. 在 Github 上创建 organization step1. 登录Github网站,点击右上角头像,选择 " ...

  4. iOS开发-xCode代码格式化xAlign

    xCode默认是可以进行代码格式化的,能满足基础开发需求,如果想要个性一些代码对齐方式宏对齐,等号对齐,属性对齐,xAlign就提供了以上三种功能,参考文中效果~ 基础效果 等号对齐: 属性对齐: 宏 ...

  5. hadoop入门篇---超详细hadoop服务器环境配置教程

    虚拟机以及Linux系统安装在之前的两篇分享中已经详细的介绍了方法,并且每一步的都配图了.如果有朋友还是看不懂,那我也爱莫能助了.本篇主要就hadoop服务器操作系统配置进行详细说明,hadoop安装 ...

  6. 【智能算法】粒子群算法(Particle Swarm Optimization)超详细解析+入门代码实例讲解

    喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 算法起源 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由E ...

  7. 超详细的FreeRTOS移植全教程——基于srm32

    ### 准备 在移植之前,我们首先要获取到FreeRTOS的官方的源码包.这里我们提供两个下载链接: > 一个是官网:http://www.freertos.org/ > 另外一个是代码托 ...

  8. 微信支付接口--超详细带注释代码--Demo

    如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 如果对你有帮助的话麻烦点个[推荐]~最好还可以follow一下我的GitHub~感谢观看! 微 ...

  9. 超详细的RNN代码实现(tensorflow)

    一.学习单步的RNN:RNNCell 如果要学习TensorFlow中的RNN,第一站应该就是去了解“RNNCell”,它是TensorFlow中实现RNN的基本单元,每个RNNCell都有一个cal ...

随机推荐

  1. OSI参考模型及各层功能,TCP与UDP的区别

    OSI参考模型:ISO/IEC 7498标准定义了网络互联的7层结构模型,即开放系统互连参考模型. OSI参考模型定义了开放系统的层次结构.层次之间的相互关系,以及各层所包括的可能的服务.OSI的服务 ...

  2. hibernate UUID问题

    前言:hibernate对于字符串类型主键支持UUID主键生成策略,(号称是世界上唯一的字符串) 运行环境:运行环境:hibernate5.2,mysql5.6 一,使用hibernate给Strin ...

  3. php无限分类

    无限循环 1.需要套2个foreach 2.2个foreach结构一样 纯代码获取数据 ){ $where['parent_id']= $parent_id; $res = $this->m-& ...

  4. Node+Express+node-mysql 实战于演习 全套mysql(增删改查)

    最近这段时间研究Node感觉不错,自己做了一个增删改查,虽然有些简陋,但是思想是想通的,其实所有项目都是增删改查,有助于初学者快速掌握Node 首先 本实例展示的是基于Node+Express+nod ...

  5. alpha版、beta版、rc版的意思

    很多软件在正式发布前都会发布一些预览版或者测试版,一般都叫“beta版”或者 “rc版”,特别是开源软件,甚至有“alpha版”,下面来解释一下各个版本的意思. alpha版:内部测试版.α是希腊字母 ...

  6. Coursera-Getting and Cleaning Data-week4-R语言中的正则表达式以及文本处理

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html Thursday, January 29, 2015 补上第四周笔记,以及本次课程总结. 第四周 ...

  7. [Machine Learning] Learning to rank算法简介

    声明:以下内容根据潘的博客和crackcell's dustbin进行整理,尊重原著,向两位作者致谢! 1 现有的排序模型 排序(Ranking)一直是信息检索的核心研究问题,有大量的成熟的方法,主要 ...

  8. CF memsql Start[c]UP 2.0 A

    CF memsql Start[c]UP 2.0 A A. Golden System time limit per test 1 second memory limit per test 256 m ...

  9. Shell标准输出、标准错误 >/dev/null 2>&1

    Shell中可能经常能看到:>/dev/null  2>&1 eg:sudo kill -9 `ps -elf |grep -v grep|grep $1|awk '{print ...

  10. 【Alpha版本】 第一天 11.7

    一.站立式会议照片: 二.项目燃尽图: 三.项目进展: 成 员 前段时间完成任务 今天完成任务 明天要做任务 问题困难 心得体会 胡泽善 部分APP功能 我要招聘详情的展示 注册界面的实现 一些特殊效 ...