EditorConfig详细用法
EditorConfig 通过 .editorconfig
文件统一编码风格,以下是所有标准属性的列表,以及它们的用法和示例。
1. 基本属性
-
root
: 标记配置文件的根节点。- 用法: 如果在文件中设置了
root = true
,则该文件及其子目录下的所有文件都将遵循此配置。 - 示例:
root = true
- 用法: 如果在文件中设置了
-
[*]
: 匹配所有文件。- 用法: 适用于所有文件类型。
- 示例:
[*] indent_style = space
2. 缩进风格
-
indent_style
: 设置缩进使用空格或制表符。- 值:
tab
(使用硬制表符)或space
(使用软空格)。 - 示例:
[*.py] indent_style = space
- 值:
-
indent_size
: 定义每个缩进级别使用的列数。- 值: 整数值。
- 示例:
[*.js] indent_size = 2
-
tab_width
: 定义用于表示制表符字符的列数。- 值: 整数值,通常与
indent_size
相同,除非特别指定。 - 示例:
[Makefile] tab_width = 4
- 值: 整数值,通常与
3. 结尾换行符
end_of_line
: 控制行尾的表示方式。- 值:
lf
(Unix 行尾)、cr
(Mac 行尾)、crlf
(Windows 行尾)。 - 示例:
[*] end_of_line = lf
- 值:
4. 字符编码
charset
: 控制字符编码。- 值:
latin1
,utf-8
,utf-8-bom
,utf-16be
,utf-16le
。 - 示例:
[*.{html,css}] charset = utf-8
- 值:
5. 修剪尾部空格
trim_trailing_whitespace
: 删除行尾的空白字符。- 值:
true
或false
。 - 示例:
[*] trim_trailing_whitespace = true
- 值:
6. 插入最终新行
insert_final_newline
: 确保文件在保存时以新行结尾。- 值:
true
或false
。 - 示例:
[*.c] insert_final_newline = true
- 值:
7. 拼写检查语言
spelling_language
: 设置用于拼写检查的语言。- 值: ISO 639 语言代码或
ss-TT
格式,其中TT
是 ISO 3166 地区标识符。 - 示例:
[*.md] spelling_language = en-US
- 值: ISO 639 语言代码或
8. 文件路径匹配
-
[*.{ext}]
: 匹配具有特定扩展名的所有文件。- 示例:
[*.{js,jsx}] indent_style = tab
- 示例:
-
[*.{ext1,ext2}]
: 匹配具有多个扩展名的所有文件。- 示例:
[*.{js,jsx,ts,tsx}] indent_size = 2
- 示例:
-
[*.{!ext}]
: 匹配所有文件,但不包括具有特定扩展名的文件。- 示例:
[*.{!test.js}] indent_style = space
- 示例:
属性的层级和覆盖
EditorConfig 文件中的属性可以定义在不同的层级中,具体应用时,更具体定义的属性会覆盖更一般定义的属性。例如:
# 在文件最顶部定义全局规则
root = true
indent_style = space
indent_size = 4# 覆盖 Python 文件的缩进大小
[*.py]
indent_size = 2# 对 lib 目录下的所有 JavaScript 文件使用 2 个空格缩进
[lib/**.js]
indent_size = 2
注解和空白
- 注解使用
;
或#
开头,可以放在单独的一行,也可以在配置行的末尾。 - 空白行会被忽略。
文件编码和行结束符
EditorConfig 文件应该是 UTF-8 编码,可以是 LF 或 CRLF 行结束符。
特殊字符转义
特殊字符,如星号 *
或方括号 [
,在需要字面量匹配时,可以使用反斜杠 \
进行转义。
节名的路径匹配
节名可以使用通配符匹配文件路径,例如 [*.py]
匹配所有 Python 文件,[lib/**.js]
匹配 lib
目录及其子目录下的所有 .js
文件。
通过这些属性和规则,EditorConfig 帮助项目维护一致的编码风格,减少编辑器之间的不一致性,并简化开发者的配置工作。
参考链接
编辑器配置 (editorconfig.org)
EditorConfig Specification — EditorConfig Specification 0.16.0 documentation