Sublime Text项目级配置必须用.editorconfig文件+EditorConfig插件,因用户设置和语法设置均不识别目录结构,无法实现“某仓库所有.py文件用2空格”这类需求;.editorconfig通过插件在文件打开时注入设置,优先级高于所有原生配置。

Sublime Text 项目级别配置不能靠改全局设置,必须用 .editorconfig 文件 + EditorConfig 插件,否则所谓“项目级”只是幻觉。
为什么用户设置和语法设置都不算项目级
用户设置(Preferences.sublime-settings)作用于整个编辑器;语法专属设置(如 Python.sublime-settings)只按文件后缀生效,不识别目录结构。它们都管不到“这个 Git 仓库里所有 .py 文件必须用 2 空格”这种需求。
-
translate_tabs_to_spaces和tab_size在用户或语法设置里写得再全,只要项目根目录有.editorconfig且插件已安装,就会被覆盖 - 即使你为每个语法都配了
translate_tabs_to_spaces: true,某次打开同事的旧项目,一开文件右下角就变回Tabs: 4——大概率是.editorconfig里写了indent_style = tab - 没有 EditorConfig 插件时,
.editorconfig文件完全被忽略,Sublime 自己根本不会读它
EditorConfig 是唯一可靠的项目级缩进控制方式
它不依赖 Sublime 的任何内部逻辑,而是通过标准配置文件声明规则,由插件在文件打开时注入设置。生效优先级高于用户设置、语法设置、甚至 detect_indentation 推断结果。
- 先装插件:
Package Control → Install Package → EditorConfig(重启 Sublime) - 在项目根目录新建
.editorconfig,内容示例:
root = true [*] indent_style = space indent_size = 2 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.py] indent_size = 4 [*.yaml] indent_size = 2 indent_style = space
-
root = true必须写,否则子目录可能继承上级配置 - 通配符
[*]定义默认行为;[*.py]这类块会精确匹配后缀,优先级更高 - 不用写
translate_tabs_to_spaces—— EditorConfig 规范里indent_style = space就等价于开启它
常见失效场景和对应检查点
配置写了、插件装了,但右下角还是显示 Tabs: 4?不是配置没写对,是它根本没加载进来。
- 打开一个文件后,按
Ctrl+Shift+P输入EditorConfig: Show Info,看输出里有没有Loaded config from .../.editorconfig;没有就说明路径或命名错了 -
.editorconfig文件名必须全小写、带点开头,不能叫editorconfig或.editorconfig.txt - 确认文件是否在项目根目录:Sublime 只向上查找第一个
.editorconfig,如果文件路径是/project/src/main.py,配置就得放在/project/.editorconfig,而不是/project/src/.editorconfig - 某些旧版 EditorConfig 插件不支持
indent_size = auto这类写法,一律用具体数字(如2或4)
混合缩进文件怎么安全过渡
项目里已有大量 \t,直接开 EditorConfig 不会自动转换历史内容,反而可能让新输入和旧缩进打架。
- 先关掉
detect_indentation:在用户设置里加"detect_indentation": false,避免 EditorConfig 加载前被文件内容反向劫持 - 对单个文件,确保右下角已显示
Spaces: 4后,再执行Convert Indentation to Spaces(快捷键Ctrl+Shift+P→ 输入该命令) - 批量处理多个文件时,别用侧边栏多选——EditorConfig 对每个标签页单独解析,可能部分文件还没加载完配置就触发转换,导致缩进错乱;应逐个打开、确认右下角状态、再转换
- 转换后立刻用
View → Show White Space验证:行首只有空格点(·),没有制表符箭头(→)
真正难的不是写配置,而是理解 EditorConfig 的加载时机和作用域边界——它只在文件打开瞬间注入设置,不重写已有字符,也不干预你手动粘贴的内容。一旦漏掉 root = true 或放错位置,整个项目就退化成靠人肉记忆缩进规则的状态。


















