根本原因是 detect_indentation 默认为 true,会自动覆盖用户设置;需设为 false 并在语法专属设置中修改 tab_size 和 translate_tabs_to_spaces。

为什么改了 Settings – User 还是缩进错乱
根本原因是 detect_indentation 默认为 true,它会在你打开任意文件的瞬间扫描前几行,强行把 tab_size 和 translate_tabs_to_spaces 改成“它猜的值”——比如你打开一个用 2 空格缩进的 Python 文件,右下角立刻显示 Tab Width: 2,哪怕你用户设置里写的是 4。
这个覆盖发生在“视图级”,优先级高于用户设置,也高于语法专属设置;不会弹窗提醒,也不会修改你的配置文件,你完全感知不到它在偷偷改。
必须在 Preferences → Settings – User 中显式加一行:"detect_indentation": false
Python 文件缩进还是 2?去 Syntax Specific 改
全局设置对 .py 文件基本无效,因为 Python 语言包自带 Python.sublime-settings,里面硬编码了 "tab_size": 2 和 "translate_tabs_to_spaces": false。你改了全局,它照旧按自己的来。
操作路径:打开任意 .py 文件 → 右下角点击语法名(如“Python”)→ 选 Open Syntax Specific Preferences
在弹出的 JSON 中只保留这两项:"tab_size": 4 和 "translate_tabs_to_spaces": true
已打开的 .py 文件不会自动刷新,要按 Ctrl+Shift+P 输入 Reload Syntax 才生效
Convert Indentation to Spaces 菜单灰掉了怎么办
灰掉 = Sublime 检测到混合缩进(Indentation: Mixed),这是保护机制,不是 bug。
View → Indentation → Convert Indentation to Spaces 不会处理混用文件,直接调用会失败
先开启空白字符可视化:"draw_white_space": "all" 加入用户设置,让空格显示为 ·、Tab 显示为 →,一眼识别混用
手动删掉前几行明显异常的缩进行首 →(比如某行开头是 →·→ 这种混搭),保存后再重试命令
或临时切语法为 Plain Text(右下角点击 → 选 Plain Text),再执行转换,避免语法插件干扰识别
已有代码缩进混乱怎么安全修复
别直接 Ctrl+A + Ctrl+] ——这会误缩字符串里的 \t 或对齐注释,导致语法错误
先确认右下角显示 Spaces: 4(不是 Tab)
菜单执行 Convert Indentation → To Spaces,把所有缩进归一化为空格
再执行 Indentation → Reindent,让 Sublime 按当前语法结构重排缩进
注意:Reindent 的效果依赖于语法识别是否准确——Vue 的 <script></script> 块若被当成 HTML,缩进就全乱;点右下角语法名手动切到 JavaScript 再试
最容易被忽略的是优先级链:文件内注释(如 # indent: 2) > 项目级 .editorconfig > 语法专属设置 > 全局设置。只要其中任一环存在,你的用户配置就可能静默失效。











