来源:iOS_小松哥ide
连接:http://www.jianshu.com/p/a725e24d7835ui
为何要格式化代码spa
当团队内有多人开发的时候,每一个人写的代码格式都有本身的喜爱,也可能会忙着写代码而忽略了格式的问题。插件
在以前,咱们可能会写完代码后,再一点一点去调格式,很浪费时间。3d
有了ClangFormat插件后,就能够一键把代码格式化成统一的样式,不只节省了时间,也使得代码更规范。咱们还能够定制本身喜欢的样式。指针
安装ClangFormat插件code
能够手动安装(下载GitHub项目编译),也能够用Alcatraz(插件管理器)安装,都很简单,具体能够看个人文章《Xcode方便开发的插件推荐》。orm
装好后是下图这样的,咱们能够看到它内置了LLVM、Google、Chromium、Mozilla、WebKit五种样式。blog
使用方法ip
经过菜单能够看到,它能够格式化选中的文字们,或者格式化选择的文件们。下面演示下LLVM样式下的格式化:
LLVM样式下的格式化
使用自定义样式
一、须要先把上面菜单里面的File选中,由于咱们须要让它用咱们本身写的配置文件。
选中File
二、在工程目录下建立配置文件.clang-format文件并编辑。.clang-format文件用的是YAML格式:里面要用的字段在后面会详细解释。
让一段代码不受格式化影响
设置快捷键
首先你能够选中菜单中的 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-true
AlignConsecutiveDeclarations (bool)
若是是true,把连续行的变量名对齐。默认为false。
AlignConsecutiveDeclarations-true
AlignTrailingComments (bool)
若是是true,对齐尾部注释。默认为false。
AlignTrailingComments-true
AllowShortCaseLabelsOnASingleLine (bool)
若是是true, 容许一个case在一行写完,默认为false。
AllowShortCaseLabelsOnASingleLine-true
BreakBeforeBraces (string)
大括号前面是否换行,具体可选值看文档。通常用Allman,表明全部大括号都换行。
BreakBeforeBraces-Allman
ColumnLimit (unsigned)
每行最多多少个字符,0不限制
IndentWidth (unsigned)
缩进宽度,默认为2,可是咱们通常设置为4。
IndentWidth-4
IndentCaseLabels (bool)
switch的case缩进宽度,通常用true。默认为false,case会和switch对齐。
KeepEmptyLinesAtTheStartOfBlocks (bool)
是否保留block里面开始的空行们。默认为true。
KeepEmptyLinesAtTheStartOfBlocks-true
MaxEmptyLinesToKeep (unsigned)
最多能够有连续几行空行,默认为1。
MaxEmptyLinesToKeep-1
ObjCBlockIndentWidth
OC的block里面的缩进宽度,默认为4。
ObjCSpaceAfterProperty (bool)
OC里面,是否在@property后加空格。默认为false。
ObjCSpaceBeforeProtocolList-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:总会在(前面加空格。
SpaceBeforeParens-ControlStatements
SpaceInEmptyParentheses (bool)
是否在()里面插入一个空格。默认false。
SpacesBeforeTrailingComments (unsigned)
在尾部//注释前面加几个空格。
SpacesBeforeTrailingComments-3
SpacesInAngles (bool)
是否在后边和>前边插入空格,默认为false。
SpacesInAngles-true
SpacesInContainerLiterals (bool)
@[]里面,是否在 [ 后和 ] 前加空格。默认为true。
SpacesInContainerLiterals-true
SpacesInParentheses (bool)
是否在(后面和)前面加空格,默认为false。
SpacesInParentheses-true
当项目里面有多种语言时,咱们能够分别设置样式:
---
# 咱们默认用 LLVM 样式, 缩进宽度为4。
BasedOnStyle: LLVM
IndentWidth: 4
---
Language: Cpp
# C++ 设置星号左对齐。
PointerAlignment: Left
---
Language: JavaScript
# JavaScript 每行字符限制设置为100。
ColumnLimit: 100
---
Language: Proto
# 不格式化Proto文件。
DisableFormat: true
...
这个是我在用的.clang-format文件。你们能够下载下来本身修改一下再用。