detect_indentation 实际已开启,但仅在文件首次打开时扫描前200行,遇首行\t即设translate_tabs_to_spaces为false,覆盖用户设置;右下角显示tab width: 4不等于启用空格缩进,需见“spaces: 4”才生效。

detect_indentation 为什么总像没开?
它其实开了,但 Sublime 的“检测”只在文件首次打开时扫描前 200 行,且一旦发现首行缩进是 \t,就立刻把 translate_tabs_to_spaces 设为 false,把你用户设置里的 true 直接覆盖。右下角显示 Tab Width: 4 并不表示你在用空格——如果旁边没写 Spaces: 4 或写着 Spaces: Off,说明空格转换根本没生效。
常见干扰源包括:
-
.editorconfig文件里有indent_style = tab,EditorConfig 插件会劫持并覆盖所有原生设置 - 当前文件语法是 Python,但
Python.sublime-settings里没显式写translate_tabs_to_spaces: true,语言包默认 fallback 到false - 文件顶部有 Vim 注释如
# vim: set ts=2 sw=2:,Sublime 会优先读取它,跳过自动探测
怎么验证 detect_indentation 是否真在工作
别只看设置里有没有 "detect_indentation": true,要实测行为:
- 按
Ctrl+Shift+P输入Set Syntax: Plain Text,切到纯文本模式,再按Tab—— 如果这时出的是空格,说明问题出在语法或插件上 - 关闭当前文件,临时重命名项目根目录的
.editorconfig,再重新打开,观察右下角是否出现Spaces: 4 - 手动触发重检测:
Ctrl+Shift+P输入Detect Indentation回车,它不会改代码,只更新当前视图的插入模式和缩进参考线
团队协作必须关掉 detect_indentation
detect_indentation 是启发式猜测,不是声明式规则。同一项目里 .py 和 .js 可能被检测出不同缩进;老文件开头全是注释,它直接放弃判断,退回到全局默认。团队规范靠管控,不是靠个人猜测。
- 在
Preferences → Settings – User中加"detect_indentation": false,否则所有其他配置都只是临时生效 - 全局设好基础值:
"tab_size": 4、"translate_tabs_to_spaces": true - 再为每种语言单独配:打开一个
.py文件 → 点右下角语法名 →Open Syntax Specific Preferences→ 加入同样两行 - 已有混用缩进的文件,先执行
Convert Indentation to Spaces,再执行Reindent,不能只靠设置
EditorConfig 才是多人协作底线
EditorConfig 插件在 Sublime 中不是“锦上添花”,而是避免格式冲突的底线工具——但装了不等于生效,配置错一行就白搭。它生效需同时满足四条件:
- 文件名为
.editorconfig且置于项目根目录 - 内容第一行必须是
root = true - Sublime 的
detect_indentation必须为false - 确保
editorconfig-core-py可用,且语言插件未覆盖设置
真正可靠的缩进控制永远是声明式的:写明“这个目录下所有 .py 文件必须用 4 空格”,而不是指望编辑器从几十行注释后猜出你想要什么。











