什么是EditorConfig


本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/07/19/%E4%BB%80%E4%B9%88%E6%98%AFEditorConfig/

摘要

本文主要讲述了:

  1. 什么是 EditorConfig
  2. 运行时间
  3. 配置

正文

什么是 EditorConfig

每个开发者都有自己的代码风格。例如:

  • tab缩进而不用space
  • 每个tab缩进4
  • 使用新行作为文件的结束

当多个开发者共同维护同一个项目时,保持代码风格统一是非常重要的。

EditorConfig 是一个用于维护代码风格的跨编辑器的插件。

运行时间

用户保存文件时

配置

文件名

.editorconfig

编码

UTF-8

配置文件查询

每当打开文件时,插件会从文件所在目录开始并逐级向上寻找.editorconfig

直到某个配置文件的root属性为true或已经到达根目录时,才会停止。

层叠配置优先级

当上级目录也存在配置文件且 CWD 的配置文件的root属性不为true时,插件会对多个配置文件进行层叠。

和被打开文件距离越短的配置文件的优先级越高,当多个配置文件冲突时,以优先级高的为准。

示例:

当打开learn_editorconfig/src/index.js时,learn_editorconfig/src/.editorconfig的优先级比learn_editorconfig/.editorconfig要高。

1
2
3
4
; learn_editorconfig/src/.editorconfig
[*]
insert_final_newline = false
indent_size = 4
1
2
3
4
5
6
; learn_editorconfig/.editorconfig
root = true

[*]
insert_final_newline = true
indent_style = space

此时,最终有效的.editorconfig为:

1
2
3
4
5
6
root = true

[*]
insert_final_newline = false
indent_size = 4
indent_style = space

语法

.editorconfig使用ini语法。但允许在章节名中使用[]

行注释

示例:

1
2
# 我是行注释
; 我是行注释

路径段分隔符

/,注意不是\

通配符

  • * 匹配字符串中的所有字符,除了/
  • ** 匹配字符串中的所有字符,包括/
  • ? 匹配字符串中的一个字符
  • [name] 匹配集合中的一个字符,例如:[a-z]匹配任意一个小写的英文字母
  • [!name] 不匹配集合中的一个字符,例如:[!a-z]不匹配任意一个小写的英文字母
  • {s1,s2,s3} 匹配给定的任意一个字符(由逗号分隔),例如:a{1,2,3}b匹配a1ba2ba3b
  • {num1..num2} 匹配整数 num1 -> 整数 num2 的闭区间,例如:{0..9}相当于[0-9]

以上的特殊字符可以使用\进行转义,这样它们就不会被视作通配符。

注意:

  1. 若 pattern 为*,匹配工作是在目标文件所在目录进行的,而非.editorconfig文件所在目录
  2. 若 pattern 包含/,匹配工作在.editorconfig文件所在目录进行的

示例:

/home/jsweibo/learn_editorconfig/.editorconfig

1
2
3
4
5
root = true

[*]
indent_style = space
indent_size = 2
  • /home/jsweibo/learn_editorconfig/*.js
  • /home/jsweibo/learn_editorconfig/src/*.js
  • /home/jsweibo/learn_editorconfig/src/foo/*.js
  • /home/jsweibo/learn_editorconfig/public/*.js
  • /home/jsweibo/learn_editorconfig/public/src/*.js
  • /home/jsweibo/learn_editorconfig/public/src/foo/*.js

示例:

/home/jsweibo/learn_editorconfig/.editorconfig

1
2
3
4
5
root = true

[/*]
indent_style = space
indent_size = 2
  • /home/jsweibo/learn_editorconfig/*.js
  • /home/jsweibo/learn_editorconfig/src/*.js
  • /home/jsweibo/learn_editorconfig/src/foo/*.js
  • /home/jsweibo/learn_editorconfig/public/*.js
  • /home/jsweibo/learn_editorconfig/public/src/*.js
  • /home/jsweibo/learn_editorconfig/public/src/foo/*.js

示例:

/home/jsweibo/learn_editorconfig/.editorconfig

1
2
3
4
5
root = true

[src/*]
indent_style = space
indent_size = 2
  • /home/jsweibo/learn_editorconfig/*.js
  • /home/jsweibo/learn_editorconfig/src/*.js
  • /home/jsweibo/learn_editorconfig/src/foo/*.js
  • /home/jsweibo/learn_editorconfig/public/*.js
  • /home/jsweibo/learn_editorconfig/public/src/*.js
  • /home/jsweibo/learn_editorconfig/public/src/foo/*.js

示例:

/home/jsweibo/learn_editorconfig/.editorconfig

1
2
3
4
5
root = true

[src/**]
indent_style = space
indent_size = 2
  • /home/jsweibo/learn_editorconfig/*.js
  • /home/jsweibo/learn_editorconfig/src/*.js
  • /home/jsweibo/learn_editorconfig/src/foo/*.js
  • /home/jsweibo/learn_editorconfig/public/*.js
  • /home/jsweibo/learn_editorconfig/public/src/*.js
  • /home/jsweibo/learn_editorconfig/public/src/foo/*.js

属性

root

停止继续向上寻找.editorconfig文件

end_of_line

行尾符

insert_final_newline

以空行作为文件的结尾

indent_style

缩进风格

indent_size

缩进大小

tab_width

tab 宽度

trim_trailing_whitespace

去除尾部的空白字符

参考资料

本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/07/19/%E4%BB%80%E4%B9%88%E6%98%AFEditorConfig/


本文对你有帮助?请支持我


支付宝
微信