[译]使用.editorconfig规范编辑器编码规范

什么是EditorConfig

EditorConfig 帮助开发人员在不同的编辑器或IDE之前定义和保持一致的编码风格。 EditorConfig 项目由用于定义编码风格的配置文件和一些编辑器插件组成,这些插件使编辑器能够读取配置文件并且遵循其定义的样式。 EditorConfig 配置文件非常易于阅读,并且能更好地更版本控制系统(如 Git )搭配使用。

配置文件

示例

下面是一个示例 .editorconfig 文件,用于设置 Python 和 JavaScript 文件行尾和缩进样式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 最顶层的配置
root = true

# 使用Unix风格的换行符,并且在每个文件最后插入换行符
[*]
end_of_line = lf
insert_final_newline = true

# 使用大括号来匹配多个文件
# 设置默认字符集
[*.{js,py}]
charset = utf-8

# Python使用四个空格缩进
[*.py]
indent_style = space
indent_size = 4

# 使用制表符Tab缩进(未指定缩进大小)
[Makefile]
indent_style = tab

# 覆盖lib目录下的缩进规则
[lib/**.js]
indent_style = space
indent_size = 2

# 匹配准确的文件: package.json 或 .travis.yml
[{package.json,.travis.yml}]
indent_style = space
indent_size = 2

配置文件存在哪里

当打开文件时,EditorConfig插件会在打开的文件的目录和每个父目录下中查找文件名为 .editorconfig 的文件。如果在根目录下或者找到 root = true 的EditorConfig文件,将停止搜索 .edtorconfig 文件。

EditorConfig 文件从上到下读取,找到最新的规则优先级越高。匹配的 EditorConfig 部分中的属性按其读取顺序应用,因此文件中较近的属性优先。

对于 Windows 用户:要在 Windows 资源管理器中创建 .editorconfig 文件,你需要创建名为 .editorconfig. ,Windows 资源管理器将自动将其命名为 .editorconfig

配置文件详解

EditorConfig 配置文件格式使用与 Python ConfigParser Library 相兼容的 INI 格式,但在区域名称中允许使用 [ and ],区域名称是 Filepath globs)(区分大小写),类似于 gitignore 接受的格式。只有正斜杠(/,不是反斜杠)作为路径分隔符,井号(#)或者分号(;)用于注释。注释应该根据当前的内容来定义。 EditorConfig 文件应使用 UTF-8 编码,使用 CRLF 或 LF 作为行分隔符。

下面介绍了Filepath glob模式和当前支持的EditorConfig属性。

通配符模式

通配符匹配的节名称中识别的特殊字符:

字符 含义
* 匹配除路径分隔符(/)之外的任何字符串
** 匹配任何字符串
? 匹配任何单个字符
[name] 匹配名称中的任何单个字符
[!name] 匹配任何不在名称中的单个字符
{s1,s2,s3} 匹配给定的任何字符串(以逗号分隔)(自EditorConfig Core 0.11.0起可用)
{num1…num2} 匹配num1和num2之间的任何整数,其中num1和num2可以是正数或负数

支持的属性

请注意,并非每个插件都支持所有属性。维基有完整的属性列表

属性 可选值 说明
indent_style tabspace 缩进风格,可以使用硬制表符(hard tabs)和软制表符(soft tabs)
indent_size intger 定义每个缩进级别使用的列数和软缩进(soft tabs)的宽度(支持时)。indent_style 设置为“tab”时,将使用 tab_width 的值
tab_width intger 定于定义制表符的列数的。默认为 indent_size 的值,通常不需要指定。
end_of_line lfcrcrlf 定义换行符的表示方式
charset latin1utf-8utf-8-bomutf-16beutf-16le 定义使用的字符集
trim_trailing_whitespace truefalse 定义是否删除换行符前面的空格
insert_final_newline truefalse 定义当文件保存时是否在最后插入换行符
root truefalse 应在任何区域之外的文件顶部指定的特殊属性。如果设置成“true”将会停止 .editorconfig 文件搜索当前文件。

对于任何属性,使用 unset 作为值会删除该属性,即使它之前已经设置过。

目前,所有的属性和值都不区分大小写。它们在解析的时候都是小写的。通常如果未指定属性或者属性的值为 unset ,则将使用编辑器的设置。

一般不指定某些EditorConfig属性是可以支持的。比如,如果与 indent_size 的值不同,否则无需指定 tab_width。此外,当 indent_style 设置为 tab 时,可能需要不指定 indent_size 的值,以便读者可以使用其首选的缩进宽度查看文件。 另外,如果项目中有未标准化的属性(例如 end_of_line ),则最好将其留空。

插件

无需插件支持

BBEdit CodeLite elementary Code Builder
Github Gogs Intellij Idea KText Editor
Komodo Kakoune Visual Studio / MonoDevelop PyCharm
ReSharper Rider RubyMine SourceLair
-
Tortoise Git Visual Studio Wenstorm -

需要插件下载

编辑器

AppCode ATOM Brackets C Lion
Coda Code::Blocks Eclipse Emacs
Geany Gedit jEdit Lazarus
Micro NetBeans Nodepad++ PhpStorm
Sublime Text Textdept TextMate Vim
- - -
Visual Studio Code - - -

无头工具

Apache Ant Graddle Maven
Donate for coffee ☕️