editorconfig for vs code插件仅同步缩进、换行符、空格/制表符等底层编辑器行为,不执行代码结构格式化;它通过读取项目根目录下root=true的.editorconfig文件,将配置映射为vs code编辑行为,如按tab插入空格、保存时转lf换行符。

EditorConfig 插件本身不格式化代码,只同步基础编辑器行为(如缩进、换行符、空格/制表符选择);想靠它解决 Ctrl+Shift+I 格式化结果不一致的问题,注定失败。
EditorConfig for VS Code 插件到底管什么
它只读取项目根目录的 .editorconfig 文件,并把其中的规则映射成 VS Code 的底层编辑行为。比如设置 indent_style = space 后,你按 Tab 键插入的是空格而非制表符;设 end_of_line = lf,保存时自动转为 Unix 换行符。但它完全不碰代码结构、括号位置、分号有无这些——那是 prettier 或语言服务干的事。
常见错误现象:
- 装了插件但
Ctrl+Shift+I仍缩进不一致 → 因为格式化动作由editor.defaultFormatter控制,不是 EditorConfig - 团队有人改了 VS Code 全局
editor.tabSize,结果覆盖了.editorconfig→ 插件默认不强制 override 用户设置,需确认插件状态栏有EditorConfig提示才生效 -
.editorconfig放在子目录下没被识别 → 它只从打开的文件所在路径向上查找,必须确保 VS Code 是以项目根目录为工作区打开的
.editorconfig 文件必须放在项目根目录且 root = true
VS Code 插件会沿文件路径向上搜索第一个 .editorconfig,找到后默认继续往上找,直到遇到 root = true 才停止。如果漏写这行,可能意外继承父目录或全局配置,导致行为漂移。
正确写法示例:
[*.py] indent_style = space indent_size = 4 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.md] max_line_length = off trim_trailing_whitespace = false
注意:
-
[*.md]这类段落必须写在root = true之后,否则会被忽略 - 通配符支持
**,如[src/**.ts]可精准匹配子目录下的 TS 文件 - 不支持条件逻辑(如“除了 test 目录”),要用
unset显式清除,例如[test/**]段落下写indent_size = unset
和 Prettier、ESLint 冲突时谁该让步
EditorConfig 是最底层的“编辑器行为规范”,Prettier 是上层“代码重写工具”,二者定位不同,但参数容易打架。典型冲突点:
-
.editorconfig设indent_size = 2,而prettier.config.js设tabWidth: 4→ 保存时 Prettier 强制覆盖,EditorConfig 的缩进设置形同虚设 -
eslint-config-prettier关闭了所有格式类规则,但没关no-mixed-spaces-and-tabs→ 它仍会报错,因为这是空格/制表符混用检测,属于 EditorConfig 管的范畴
所以实际协作中应遵守:
- 缩进、换行、字符集、末尾空行等交由
.editorconfig控制,并确保所有编辑器都装了对应插件 - Prettier 配置里的
tabWidth、useTabs、endOfLine必须和.editorconfig完全一致,否则 CI 和本地格式化结果必然不一致 - ESLint 只保留逻辑/安全类规则,所有格式相关 rule 必须显式禁用,避免和 Prettier 或 EditorConfig 对冲
为什么 .vscode/settings.json 不该写缩进数值
很多人习惯在 .vscode/settings.json 里写 "editor.tabSize": 2,但这会覆盖 .editorconfig 的声明,而且该文件常被 .gitignore 排除,新人 clone 项目后根本看不到规则。
更严重的是:这个设置只对 VS Code 有效,WebStorm、Vim、Git hooks、CI 流水线全都不认。真正跨编辑器、跨环境生效的只有 .editorconfig + EditorConfig 插件组合。
所以 .vscode/settings.json 应只保留三类内容:
-
"editor.formatOnSave": true(触发时机) -
"editor.defaultFormatter": "esbenp.prettier-vscode"(指定谁来格式化) -
"editor.detectIndentation": false(防止 VS Code 自作主张探测缩进,干扰 .editorconfig)
其他所有格式细节,包括缩进大小、是否用空格、换行符类型,全部交给 .editorconfig 管理——这才是它存在的唯一目的。











