- 缩进与换行
- 1. 如何保证统一的缩进风格?
- 2. 快速开始
- 3. EditorConfig 文档
缩进与换行
用空格好还是 TAB 好?4个空格还是2个空格好?这是永远的圣战,累觉不爱,本文档不做详细说明。
但是无论如何,项目中应该保持统一的缩进风格,以利于代码的阅读,同时可以避免在 git 等版本管理工具中造
成冗余的 diff 信息,而且千万不要空格和制表符(TAB)混用。
本文档规定:
- 使用2个空格缩进。
使用 Unix 风格换行符(LF)
保证跨平台的一致性,更多。删除行尾多余的空格
因为这些空格通常是不必要的(JSHint 中会通过trailing来检测是否存在多余的空格)。文件末尾增加一个空行
没有空行在合并多个文件时可能会把上一个文件的最后一行与下一个文件的第一行合并为一行,特别是,JS 中如果没有这个空行而恰巧末尾没有写分号,整个文件可能就会报错了。扩展阅读:
- 为什么 C 语言源程序最后一行要是一个空行?
- Why should files end with a newline?
1. 如何保证统一的缩进风格?
Sublime Text 在新建工程的时候会生成 xxx.sumlime-project 文件,可以配置一些基本缩进和排除目录等,但遗憾的是无法与其他编辑器通用。
cube.css 中的示例:
{"folders": [{"path": ".","folder_exclude_patterns": ["node_modules", "_site"] // 排除目录}],"settings": {"tab_size": 4,"translate_tabs_to_spaces": true, // tab 转换为空格"ensure_newline_at_eof_on_save": true, // 保存时文件末尾自动增加一个空行"trim_trailing_white_space_on_save": true // 删除行尾多余的空格}}
EditorConfig 是一个帮助开发者在不同的编辑器中保持统一编码
风格的插件,支持了大部分流行的编辑器。它包括两部分:代码风格规则定义(.editorconfig 文件)和支持此规则的编辑器插件。
2. 快速开始
在项目根目录新建一个
.editorconfig文件,保存为 utf-8 格式。Windows 用户由于无法直接新建一个只有扩展名的文件,新建的时候在末尾多加一个点 即可(.editorconfig.),也可以在命令行(CMD)中使用echo.>.editorconfig来创建。
编辑
.editorconfig文件# css-creating coding styleroot = true# 为所有文件设置风格[*]charset = utf-8indent_style = spaceindent_size = 2end_of_line = lftrim_trailing_whitespace = trueinsert_final_newline = true# 为 Markdown 文件保留行尾空格[*.md]trim_trailing_whitespace = false# 匹配多种类型的文件(逗号前后不能有空格)[*.{css,scss,sass}]indent_size = 2# 匹配多个指定的文件(逗号前后不能有空格)[{package.json,.travis.yml}]indent_style = spaceindent_size = 2
安装编辑器插件
![]() AppCode | ![]() Atom | ![]() Brackets | ![]() Code::Block |
![]() Emacs | ![]() Geany | ![]() Gedit | ![]() GitHub |
![]() inteltdJ | ![]() jEdit | ![]() Notepad++ | ![]() PHPStorm |
![]() PyCharm | ![]() RubyMine | ![]() Subtdme Text | ![]() TextMate |
![]() Vim | ![]() Visual Studio | ![]() WebStorm |
3. EditorConfig 文档
通配符规则:
*匹配任意字符串,但不包括/**匹配任何字符串?匹配任何单字符[name]匹配任何括号中的单字符[!name]匹配任何非括号中的单字符{s1,s2,s3}匹配任何给出的多个字符串说明:
[]匹配规则是从当前目录算起。?只能匹配且必须有类似 f1.js、f2.js、f12.js 的文件,通过f??.js只能匹配到 f12.js,而f**.js可以匹配到所有。{s1,s2,s3}之间不能有空格。{f1.js, f2.js, f3.js}无法匹配f2.js和f3.js。*和**可以匹配空字符串,例如f*.js可以匹配到f.js。- 多个匹配之间的规则如果不冲突是可以合并的。
- 优先级问题,如果两个匹配所定义的规则冲突,则会以最靠近打开文件的
`.editorconfig文件为准。
如果同一个文件中匹配定义冲突,则会以最后定义的为准。所以在定义规则的时候,须先定义通用规则,后定义特殊规则。
属性规则(所有属性不区分大小写)
| 属性 | 值 | 说明 |
|---|---|---|
| root | true, false | 设置是否是当前项目的根目录 |
| indent_style | tab, space | 设置缩进格式 |
| indent_size | number | 设置缩进大小 |
| tab_width | number | 设置 tab 表示的空格数,默认等于indent_size,无需设定 |
| end_of_line | lf(Unix \n), cr(Mac OS \r), crlf(Windows \r\n) | 设置行尾换行符格式 |
| charset | atin1, utf-8, utf-8-bom, utf-16be, utf-16le 等 | 设置字符编码 |
| trim_trailing_whitespace | true, false | 设置是否自动删除行尾多余空格 |
| insert_final_newline | true, false | 设置是否在保存文件时自动在行尾插入空行 |
