EditorConfig 文件必须置于项目根目录且含 root = true 才生效;VSCode 需通过根目录打开、安装官方插件,并避免 Prettier 等格式化工具覆盖其规则。

EditorConfig 文件必须放在项目根目录才能生效
VSCode 不会自动向上查找 .editorconfig,它只认当前打开文件所在工作区的根目录下的配置。如果你在子文件夹里打开 VSCode(比如直接双击某个 src/ 下的文件),编辑器根本读不到项目根目录的 .editorconfig。
- 确保 VSCode 是通过项目根目录打开的:终端进到项目顶层,执行
code . - 检查 VSCode 窗口左下角是否显示了正确的文件夹名(不是“空工作区”或子路径)
- 打开命令面板(
Ctrl+Shift+P),运行Developer: Toggle Developer Tools,在 Console 里搜editorconfig,能看到加载日志;如果没输出,大概率没找到文件
VSCode 需要安装 EditorConfig 插件且不能被其他格式化插件覆盖
VSCode 自身不原生支持 .editorconfig,必须装官方 EditorConfig for VS Code 插件(作者是 EditorConfig 团队)。但装了也不代表一定起作用——一旦你同时启用了 Prettier、ESLint 自动修复或保存时格式化,它们可能直接绕过 EditorConfig 的规则。
- 在设置里搜索
format on save,确认它是false,或至少设为仅对特定语言启用 - 检查
editor.defaultFormatter是否被设成了esbenp.prettier-vscode之类;如果是,EditorConfig 只控制缩进/换行等基础项,其余交给 Prettier —— 这没问题,但得心里有数 - 想让 EditorConfig 全权接管,就关掉所有其他格式化扩展,或在
settings.json中加:"editor.formatOnSave": false
indent_style 和 indent_size 在不同语言中行为不一致
EditorConfig 的 indent_style(space 或 tab)和 indent_size 确实会被 VSCode 读取,但它只影响「新插入缩进」的行为,不修改已有代码。更关键的是:某些语言扩展(比如 Python 的 Pylance、TypeScript 的内置服务)会用自己的缩进逻辑覆盖 EditorConfig 设置。
- Python 文件中,即使
.editorconfig写了indent_size=2,VSCode 默认仍按 PEP 8 推荐的 4 空格缩进,除非你在settings.json中显式禁用python.editor.insertSpaces - Vue 或 Markdown 文件里,
indent_size对模板/列表缩进基本无效,因为这些语法的缩进逻辑由语言服务决定 - 验证方式:新建一个空文件,保存后输入回车+Tab,看插入的是空格还是 Tab,再敲
Enter看下一行缩进是否符合预期
常见错误:.editorconfig 缺少 root = true 导致子目录失效
如果没有 root = true,EditorConfig 工具链(包括 VSCode 插件)会在父目录继续查找,可能意外加载到上级项目甚至全局的配置,导致行为不可控。这不是“可有可无”的字段,而是明确边界的关键开关。
- 必须把
root = true放在文件最顶部,前面不能有任何注释或空行 - 不要写成
root=true(等号前后必须有空格) - 错误示例:
[*.js]\nindent_style = space—— 没有root = true,VSCode 可能跳过这个文件 - 正确开头长这样:
root = true\n\n[*]\nindent_style = space\nindent_size = 2


















