zoukankan      html  css  js  c++  java
  • Xcode代码格式化教程,可自定义样式

    来源:iOS_小松哥

    链接:http://www.jianshu.com/p/a725e24d7835

    为什么要格式化代码

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

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

    有了ClangFormat插件后,就可以一键把代码格式化成统一的样式,不仅节省了时间,也使得代码更规范。我们还可以定制自己喜欢的样式。

    安装ClangFormat插件

    可以手动安装(下载GitHub项目编译),也可以用Alcatraz(插件管理器)安装,都很简单,具体可以看我的文章《Xcode方便开发的插件推荐》。

    装好后是下图这样的,我们可以看到它内置了LLVM、Google、Chromium、Mozilla、WebKit五种样式。

     

    使用方法

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

     

    LLVM样式下的格式化

    使用自定义样式

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

     

    选中File

    2、在工程目录下创建配置文件.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文件。大家可以下载下来自己修改一下再用。

  • 相关阅读:
    拥塞避免
    计算机网络常考
    [CODEVS1014]装箱问题
    [CODEVS2055]集合划分
    [CODEVS3641]上帝选人
    [GRYZ2014]递增子序列最大和
    [GRYZ2014]最大连续子序列的和
    金矿模型看动归
    [CODEVS1220]数字三角形
    [CODEVS1294]全排列
  • 原文地址:https://www.cnblogs.com/fengmin/p/5907932.html
Copyright © 2011-2022 走看看