前言

当一个大的项目有很多人进行开发的情况下,往往需要遵守统一的编码规范,但是每个人都有自己喜欢的不同的编辑器,如sublimeTextVimWebstorm等等,要么需要每个人都对编辑器进行设置以符合需求,要么就是使用Eslint等代码检查工具进行验证,修改至符合要求,太过麻烦。

EditorConfig很好地解决了这个问题。

EditorConfig简介

EditorConfig就是编辑器配置,它帮助开发者定义和保持一致的代码规范在不同的编辑器之间,只需使用一个文件定义代码规范和一些插件安装就能使编辑器识别并使用这个文件,这个文件很容易阅读且在不同的系统中也能工作地很好。

配置使用

  1. 在项目根创建一个名为 .editorconfig 的文件。该文件的内容定义该项目的编码规范
  2. 安装与编辑器对应的 EditorConfig 插件。

工作原理:EditorConfig插件会去查找当前编辑文件的所在文件夹或其上级文件夹中是否有 .editorconfig 文件,直到找到项目根目录或者找到root=true的那个editorconfig的文件。如果有,则编辑器的行为会与 .editorconfig 文件中定义的一致,且距离越近的editorconfig文件的优先级会越高,并且覆盖编辑器自身的设置。

一个简单的editorconfig文件实例:

# top-most EditorConfig file
root = true

# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true

# Matches multiple files with brace expansion notation
# Set default charset
[*.{js,py}]
charset = utf-8

# 4 space indentation
[*.py]
indent_style = space
indent_size = 4

# Tab indentation (no size specified)
[Makefile]
indent_style = tab

# Indentation override for all JS under lib directory
[lib/**.js]
indent_style = space
indent_size = 2

# Matches the exact files either package.json or .travis.yml
[{package.json,.travis.yml}]
indent_style = space
indent_size = 2

格式

EditorConfig文件使用INI格式。斜杠(/)作为路径分隔符,#或者;作为注释。路径支持通配符:

通配符 说明
* 匹配除/之外的任意字符
** 匹配任意字符串
? 匹配任意单个字符
[name] 匹配name字符
[!name] 不匹配name字符
[s1,s2,s3] 匹配给定的字符串
[num1..num2] 匹配num1mun2直接的整数

属性

EditorConfig支持以下属性:

属性 说明
indent_style 缩进使用tab或者space
indent_size 缩进为space时,缩进的字符数
tab_width 缩进为tab时,缩进的宽度
end_of_line 换行符的类型。lf, cr, crlf三种
charset 文件的charset。有以下几种类型:latin1, utf-8, utf-8-bom, utf-16be, utf-16le
trim_trailing_whitespace 是否将行尾空格自动删除
insert_final_newline 是否使文件以一个空白行结尾
root 表明是最顶层的配置文件,发现设为true时,才会停止查找.editorconfig文件
  • 所有的属性都对大小写不敏感
  • 如果没有设置这个属性将会使用编辑器默认的属性
  • 如果将这个属性设置为unset将会覆盖之前设置的值,从而使用编辑器默认的属性

编辑器插件

如下这些编辑器不需要安装插件都支持editorconfig:













下面这些编辑器都需要安装对应的插件:

































































参考文档