.editorconfig文件配置说明

什么是EditorConfig?

EditorConfig有助于维护跨多个编辑器和IDE从事同一项目的多个开发人员的一致编码风格。EditorConfig项目包含一个用于定义编码样式的文件格式和一个文本编辑器插件集合,这些文本编辑器插件使编辑器可以读取文件格式并遵循定义的样式。EditorConfig文件易于阅读,并且可以与版本控制系统很好地协同工作。

EditorConfig文件通常为.editorconfig

.editorconfig文件格式

.editorconfig文件的格式类似于INI,有小节标题,配置使用key = value的方式。

1
2
3
4
5
6
7
序言

[小节1]
key = value

[小节2]
key = value

文件的每一行只可以是下面4种格式

  • 空白:仅包含空格字符。

  • 注释:以;或开头#

    不推荐在一行非空格字符后插入注释,不算做注释,在key = value中使用注释还会被当做值的一部分

    错误示范:

    1
    2
    3
    4
    
    # 错误不要这样写
    [*] #任意文件
    # 错误不要这样写
    end_of_line = lf #换行符设置为lf
    

    正确示范:

    1
    2
    3
    4
    
    #任意文件
    [*]
    #换行符设置为lf
    end_of_line = lf 
    
  • 节标题:以[开头,以] 结束。

    • 不得在方括号外使用任何非空白字符。

    • 可以在方括号之间包含任何字符,空格和tab也可以。

    • 正斜杠(/)用作路径分隔符。

    • 不允许将反斜杠\\用作路径分隔符(即使在Windows上也是如此)。

  • 键/值对:包含一个键和一个值,以=分隔。

    • 键:=之前的部分(修剪空白)。

    • 值:=之后的部分(修剪空白)。

小节文件路径匹配

特殊字符 匹配
* 除路径分隔符(/)以外的任何字符串
** 任何字符串
? 除路径分隔符(/)以外的任何单个字符
[seq] seq中的任何单个字符
[!seq] seq中没有的任何单个字符
{s1,s2,s3} 给定的任何字符串(以逗号分隔,可以嵌套)
{num1..num2} num1num2之间的任何整数,其中num1num2 可以是正数或负数

反斜杠字符(\\)可用于转义字符,因此不会被解释为特殊字符。

节名称的最大长度为4096个字符。超出此限制的所有部分都将被忽略。

.editorconfig文件搜索规则

编辑器会从当前目录开始搜索,找不到.editorconfig会继续往上级目录(父目录)继续搜索,如果在序言中遇到

1
root = true

就表示是最顶层配置文件了,不会再往上搜索。

然后从上到下读取文件,并且找到的最新规则优先。如果多个.editorconfig文件具有匹配的部分,则最后读取的规则生效

也就是离文件最近的.editorconfig会生效

支持的配置

广泛支持的配置

说明 可选值
indent_style 缩进方式 tab,space
indent_size 缩进字符数,当indent_style= space时需要设置该项,如果indent_size = tab,则缩进字符数从tab_width取值,如果tab_width没有设置,则使用编辑器默认的 整数,tab
tab_width 设置tab缩进的列数,当indent_style= space时需要设置该项,当不设置的情况下,如果indent_size设置为一个整数,则tab_width=indent_size的值 整数
end_of_line 换行符,***注意:*如果要在不同操作系统之间使用操作系统的换行符,最好不要设置此选项并将该任务留给VCS(例如:Git)!将来,我们可能会为这种情况添加一个native值(参见#226)。 lf,cr,crlf
charset 字符集,utf-8-bom不推荐使用 latin1, utf-8 ,utf-16be,utf-16le,utf-8-bom
trim_trailing_whitespace 删除行尾空白字符,true将删除换行符之前的空白字符 true,false
insert_final_newline 文件结尾是否插入空白行 true,false
root 必须在序言中指定。设置为true将停止继续往上级目录搜索.editorconfig文件 true,false

配置不区分大小写。解析后,所有键均小写。键的最大长度为50个字符,值的最大长度为255个字符。超出这些限制的任何键或值都将被忽略。

部分编辑器支持的配置

max_line_length

超过字符长度将强制换行,设置为off将关闭该选项,使用编辑器默认配置

可选值

  • 正整数
  • off

支持的编辑器

  • Emacs
  • Vim
  • Atom
  • ReSharper and Rider
  • AppCode, IntelliJ IDEA, PhpStorm, PyCharm, RubyMine, and WebStorm
  • Kakoune

移除配置项

将任何配置项设置为unset,都会移除该配置项

1
indent_size = unset

使用EditorConfig的项目

https://github.com/editorconfig/editorconfig/wiki/Projects-Using-EditorConfig

看几个有名项目的.editorconfig

Spring-boot

1
2
3
4
5
6
root=true

[*.{groovy,java,kt,xml}]
indent_style = tab
indent_size = 4
continuation_indent_size = 8

vue

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# http://editorconfig.org

root = true

[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

laravel

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true

[*.md]
trim_trailing_whitespace = false

[*.{yml,yaml}]
indent_size = 2

nodejs

 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
root = true

[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

[vcbuild.bat]
end_of_line = crlf

[Makefile]
indent_size = 8
indent_style = tab

[{deps}/**]
charset = unset
end_of_line = unset
indent_size = unset
indent_style = unset
trim_trailing_whitespace = unset

[{test/fixtures,deps,tools/node_modules,tools/gyp,tools/icu,tools/msvs}/**]
insert_final_newline = false

资料

EditorConfig官网

EditorConfig最新规范

EditorConfig-Properties