editorconfig 在 vscode 中需安装官方插件、将 .editorconfig 放在工作区根目录并设 root = true,且需删除 editor.tabsize 等冲突设置才能生效。

EditorConfig 不是 VSCode 内置功能,必须装插件 + 放对位置 + 设对参数,三者缺一不可;否则你配的 indent_size = 2 就只是个注释。
EditorConfig 插件没生效?先确认这三件事
VSCode 原生完全不读 .editorconfig,所谓“配置了没反应”,90% 卡在这三个硬性条件上:
- 插件必须是官方
EditorConfig for VS Code(作者:EditorConfig team),不是名字带 EditorConfig 的其他插件 -
.editorconfig文件必须放在 VSCode 当前打开的**工作区根目录**下——不是子文件夹,也不是父目录;多根工作区要放在主工作区路径 - 文件里必须有
root = true,否则 VSCode 会一路向上找(比如找到你家目录的全局配置),直接覆盖项目本意
验证是否生效:右下角状态栏应显示 EditorConfig 字样;若无,按 Ctrl+Shift+P → 输入 Developer: Toggle Developer Tools,在 Console 里执行 editor.getModel().getOptions().tabSize,返回值应与你配置的 indent_size 一致。
缩进宽度被 editor.tabSize 覆盖?删掉它
editor.tabSize 和 editor.insertSpaces 这两个用户级设置,优先级高于 .editorconfig 的 indent_size 和 indent_style。结果就是:你写了 indent_size = 2,但文件里还是 4 格缩进。
解决办法很直接:
- 打开
settings.json(Ctrl+,→ 右上角“打开设置(JSON)”) - 删掉
"editor.tabSize"和"editor.insertSpaces"这两行 - 确保
.editorconfig里有root = true、indent_style = space、indent_size = 2等明确项
这样 VSCode 才真正交权给 .editorconfig,而不是自己偷偷覆盖。
JS/TS/Python 文件不认规则?加语言专属段落
end_of_line = lf 或 indent_size = 4 这类规则,对 JS/TS/Python 默认无效——VSCode 的语言服务会忽略全局 [*] 段落,除非你明说“这规则管 JS”。
正确写法是显式声明语言段落:
[*.js] indent_size = 2 end_of_line = lf [*.py] indent_size = 4 insert_final_newline = true
注意:end_of_line 只影响新保存的文件,不会自动转换已有换行符;改完后需手动点右下角 CRLF/LF 标识切换一次再保存,才能触发生效。
Prettier 和 EditorConfig 缩进冲突?关掉它的自治权
Prettier 默认用自己的 tabWidth 覆盖 .editorconfig 的 indent_size,哪怕你开了 prettier.useEditorConfig(默认为 true)。这是 Prettier 的设计逻辑:它只读 .editorconfig 的 charset、end_of_line 等基础项,缩进仍由自己控制。
想让 EditorConfig 真正接管缩进:
- 在
settings.json中设"prettier.tabWidth": null(或删掉该行) - 确保
"prettier.useEditorConfig": true(新版默认开启,但旧版或自定义配置可能关了) - 或者更干脆:禁用
esbenp.prettier-vscode,只靠 EditorConfig + VSCode 原生格式化
最麻烦的不是配不配得上,而是不同人编辑、不同插件介入、不同文件历史混杂导致“表面正常,保存即崩”——盯住 root = true 是否存在、editor.tabSize 是否被删、prettier.tabWidth 是否为空,比反复手动调更省时间。











