EditorConfig插件缩进/换行未生效,须检查四点:1.文件名必须为.editorconfig且置于项目根目录;2.root = true需存在且位于顶部;3.关闭Sublime的"detect_indentation": false;4.确认editorconfig-core-py命令可用。

EditorConfig插件装了但缩进/换行没生效,先查这四件事
EditorConfig 插件不是“安装即生效”,它依赖完整加载链。任一环节缺失,indent_style、end_of_line 就会静默失效。
- 文件名必须严格为
.editorconfig(开头一个点、全小写、无后缀),且放在你用 Sublime 打开的项目根目录下;editorconfig、.editorconfig.txt、src/.editorconfig全部无效 -
root = true必须存在,且建议放在文件顶部几行;没有它,Sublime 会继续向上查找父目录的配置,可能误加载其他项目的规则 - 在
Preferences.sublime-settings中显式关闭 Sublime 自身的缩进检测:"detect_indentation": false;否则它会优先沿用旧文件里“记住”的缩进方式 - 确认系统命令
editorconfig-core-py可用:终端执行editorconfig-core-py --version应返回版本号;macOS M1/M2 用户需检查which editorconfig-core-py是否输出路径,若无,要把/opt/homebrew/bin加到 Sublime 的env配置中
为什么保存后还是 CRLF 或 Tab?关键在 end_of_line 和 indent_style 的作用边界
end_of_line = lf 和 indent_style = space 不是格式化指令,它们只控制后续编辑行为——这点最容易被误解。
-
end_of_line = lf仅在**保存时**生效,且前提是当前文件编码支持转换(GBK 编码下设lf会被跳过) -
indent_style = space+indent_size = 4只保证你按 Tab 键插入 4 个空格,不会自动把已有 Tab 字符替换成空格 - 已有内容不会被重写;想批量修正,得用语言专属工具(如
autopep8 --in-place或prettier --write),EditorConfig 不负责这事 - 如果打开文件时看到缩进混乱,说明历史内容未被清理;EditorConfig 只管“将来怎么写”,不管“过去怎么改”
多语言项目怎么配 .editorconfig?节匹配规则必须写对
不同语言需要不同缩进、不同规则,靠 [*.py]、[*.js] 这类节(section)精准匹配,顺序和通配符写错就失效。
- 通配符必须用花括号:正确是
[*.js,*.ts,*.jsx],错误是[*.js, *.ts](空格会导致匹配失败) - 节匹配有优先级:越具体的节越靠前;
[Makefile]比[*]优先,所以制表符缩进可单独指定 - Markdown 等特殊文件常需例外处理:
[*.md]下设trim_trailing_whitespace = false,避免文档末尾空格被删 - Python 项目别漏
[*.py]块;只靠[*]设indent_size = 4不够,因为 JS/TS 通常要 2,必须分语言声明
和 JS-Beautify / AutoPEP8 协同时,怎么避免冲突和静默失败
EditorConfig 负责基础风格(缩进、换行),JS-Beautify 或 AutoPEP8 负责语法级格式化;两者必须对齐参数,且不能抢着保存。
- JS-Beautify 的
indent_size和end_with_newline必须与.editorconfig一致,否则保存后又回退 - AutoPEP8 必须确保系统 PATH 中有
autopep8命令,且插件配置启用--in-place;否则保存无反应 - 禁用所有插件自带的 “Auto format on save” 开关;统一走 Sublime 的
on_save事件调外部命令,避免多个插件同时触发导致覆盖 - macOS M1/M2 上 Node.js 路径常不在默认
/usr/bin,JS-Beautify 插件设置里要显式填"node_path": "/opt/homebrew/bin/node"
EditorConfig 不是万能格式化器,它只定义“新输入怎么写”。真正统一团队代码规范,得靠它 + 语言专用工具 + 明确的配置位置 + 关闭 Sublime 干扰项 —— 少一个环节,就可能在某台机器上悄无声息地失效。











