editorconfig插件不生效需确认三件事:装官方插件、.editorconfig在工作区根目录、配置root=true;删editor.tabsize等用户设置;js/ts需显式语言段落;pretterr需删tabwidth并启用useeditorconfig。

EditorConfig 插件不生效?先确认三件事
VSCode 原生根本不解析 .editorconfig,必须装插件且启用才起作用。常见“配了没反应”基本卡在这三步:
- 插件没装或已禁用:必须安装官方
EditorConfig for VS Code(作者是EditorConfig团队),不是名字相似的其他插件 -
.editorconfig不在工作区根目录:VSCode 只查你当前打开的那个文件夹顶层,不会向上递归找父目录;多根工作区要放在主工作区根路径下 - 没设
root = true:缺这一行,VSCode 会一路往上找(比如找到你家目录的全局配置),直接覆盖项目本意
验证是否生效:右下角状态栏应显示 EditorConfig 字样;若无,按 Ctrl+Shift+P → 输入 Developer: Toggle Developer Tools,在 Console 里执行 editor.getModel().getOptions().tabSize,看返回值是否匹配你配置的 indent_size。
缩进宽度(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_size、indent_style
这样 VSCode 才真正交权给 .editorconfig,而不是自己偷偷覆盖。
JavaScript/TypeScript 文件不认 end_of_line?必须显式声明语言段落
end_of_line = lf 这类规则,对 JS/TS 文件默认无效——VSCode 的语言服务会忽略全局 * 段落,除非你明说“这规则管 JS”。否则右下角可能一直显示 CRLF,保存也不变。
正确写法是加一个语言专属段落:
[*.js] end_of_line = lf [*.ts] end_of_line = lf
注意:end_of_line 只影响新保存的文件,不会自动转换已有文件换行符。改完后手动点右下角换行符标识(CRLF/LF)切换一次,再保存,才能触发生效。
Prettier 和 EditorConfig 冲突?关掉它的缩进自治权
Prettier 默认会用自己的 tabWidth 覆盖 .editorconfig 的 indent_size,哪怕你开了 prettier.useEditorConfig(默认为 true)。这是 Prettier 的设计逻辑:它只读 .editorconfig 的 charset、end_of_line 等基础项,缩进仍由自己控制。
想让 Prettier 尊重 .editorconfig 的缩进,必须在 .prettierrc 里显式删掉 tabWidth,或设为 null(部分版本支持),更稳妥的是:
- 删掉
.prettierrc里的"tabWidth"字段 - 确保
prettier.useEditorConfig在 VSCode 设置中为true(检查settings.json) - 重启 VSCode 或重新打开文件夹
否则,你看到的缩进永远是 Prettier 决定的,和 .editorconfig 无关。
最常被跳过的一步是:团队成员各自设置了 editor.tabSize,又没删掉,导致 .editorconfig 形同虚设。统一规范不是配个文件就完事,得把本地“坏习惯”清干净。











