◆
EditorConfig 配置详解与常用规则
团队里有人用 VS Code、有人用 WebStorm、有人用 Vim,各自的默认缩进和换行符设置不一样,结果同一个文件被不同人改过之后,git diff 里全是缩进和行尾的噪音,真正的逻辑改动反而看不出来。.editorconfig 解决的就是这个问题:把格式约定写进项目根目录的一个文件,各家编辑器读同一份配置。
它和 Prettier / ESLint 的分工不重叠。EditorConfig 管的是编辑器的输入行为——你按下 Tab 键插入什么、保存时行尾怎么处理,作用在敲代码的那一刻;Prettier 管的是已有代码的重排,作用在保存或提交时。两者都配上才完整,而且缩进这类重复配置项要保持一致,否则会互相打架。
EditorConfig 包含一个用于定义代码格式的文件和一批编辑器插件, 这些插件是让编辑器读取配置文件并以此来格式化代码。
配置文件放在项目根目录,命名为 .editorconfig。下面这份带完整注释,逐项说明了作用。
结构上分成若干个 section,[...] 里是文件匹配规则,下面的键值对作用于匹配到的文件。查找是自下而上的:编辑器从当前文件所在目录逐级往上找 .editorconfig,直到遇到 root = true 才停——所以根目录那份必须写 root = true,否则会继续往上翻到用户主目录甚至系统盘,读进不相干的配置。
# 当用IDE打开一个文件时,EditorConfig插件会在打开文件的目录和其每一级父节点查找.editorconfig文件,直到找到一个配置了root = true的配置文件。
# 表明是最顶层的配置文件,发现设为true时,才会停止查找.editorconfig文件
root = true
# * 匹配全部文件,表示下面的规则应用于所有文件
[*]
# 使用`utf-8`字符集
charset=utf-8
# 结尾换行符,可选 `lf`、`cr`、`crlf`
end_of_line=lf
# 在文件结尾插入新行
insert_final_newline=true
# 缩进的样式为空格(space) 或者 tab
indent_style=space
# 缩进为space时,缩进的字符数 2
indent_size=2
# 行最大长度为 100
max_line_length = 100
# 匹配以`.yml`、`.yaml`、`.json`结尾的文件,对齐进行定制化配置
[*.{yml,yaml,json}]
indent_style = space
indent_size = 2
# 匹配以`.md`结尾的文件
[*.md]
# 是否将行尾空格自动删除
trim_trailing_whitespace = false
[Makefile]
indent_style = tab
其他配置
另外两个不太常用但偶尔需要的键。tab_width 只在 indent_style = tab 时有意义——它不改变实际插入的字符(还是一个 Tab),只影响显示宽度;用 space 缩进时用 indent_size 就够了。
# insert_final_newline 是否使文件以一个空白行结尾
# tab_width 缩进为tab时,缩进的宽度
注意事项
- VS Code 需要装 EditorConfig 插件才生效,WebStorm / IDEA 系内置支持、开箱可用。装了插件也不生效时,先确认文件名前面那个点没漏、并且位置在项目根目录。
.editorconfig必须提交进版本库,它的价值就在于团队共享。放进.gitignore等于白配。- 两个 section 里的规则会叠加,越靠后的匹配优先级越高。所以
[*]写在最前面当基线,特定文件类型的定制写在后面覆盖。 [*.md]里把trim_trailing_whitespace设为false不是随意写的:Markdown 用行尾两个空格表示强制换行,自动删掉行尾空格会把这个语义弄丢。[Makefile]必须用 tab 缩进,这是 make 的语法要求,改成空格会直接报missing separator。同理 Go 项目也应该单独配 tab。max_line_length只是给编辑器画一条参考线,不会自动折行。真正的换行由 Prettier 的printWidth负责,两个值建议对齐。

还没有留言,来发表第一条吧~