Sublime缩进失效因detect_indentation默认开启,需在用户设置中禁用;语法专属设置优先级高于全局;混合缩进或.editorconfig会覆盖配置,须按优先级链排查。

Tab键还是插\t?先关掉detect_indentation
按 Tab 键仍插入 \t,不是设置没写对,而是 Sublime 默认开启 detect_indentation。它一打开文件就扫描前几行,只要看到 \t 或 2 空格,立刻覆盖你设的 tab_size 和 translate_tabs_to_spaces。右下角显示 Tabs: 4 就是它在生效。
必须在 Preferences → Settings – User 中显式添加:
{
"detect_indentation": false
}
不加这行,其他所有配置都只是临时有效——关掉再打开文件,又变回 \t。
Python/JS 文件缩进还是 2?去 Syntax Specific 改
全局设置对 .py、.js、.json 等文件基本无效,因为语言包自带的 Python.sublime-settings 或 JavaScript.sublime-settings 优先级更高,且通常硬编码了 "tab_size": 2 和 "translate_tabs_to_spaces": false。
操作路径:
- 先打开一个
.py文件 Preferences → Settings – Syntax Specific- 右侧只加两行(别删原有内容):
{
"tab_size": 4,
"translate_tabs_to_spaces": true
}
已打开的文件需手动执行 Ctrl+Shift+P → 输入 Reload Syntax 回车才刷新。
Convert Indentation to Spaces 灰掉了?混合缩进被保护
菜单里 Convert Indentation → Convert to Spaces 灰掉,不是功能坏了,是 Sublime 检测到混合缩进(部分行用 \t,部分用空格),主动拒绝转换以防错位。
安全处理步骤:
- 先开启空白字符可视化:
"draw_white_space": "all",让\t显示为→,空格为· - 手动删掉前几行明显混搭的缩进(比如某行开头是
→·→) - 保存后重试命令;或临时切语法为
Plain Text(右下角点击 → 选Plain Text),再执行转换 - 转完后务必执行
Ctrl+Shift+P→Indentation: Reindent Lines,否则缩进层级可能未对齐
.editorconfig 或项目配置正在悄悄接管
如果项目根目录有 .editorconfig,且含 indent_style = tab 或 indent_size = 2,EditorConfig 插件会直接劫持缩进逻辑,优先级高于所有 Sublime 自身设置。
检查方法:
- 看右下角是否显示
EditorConfig标识 - 执行
Ctrl+Shift+P→ 输入EditorConfig: Show Current Config查看实际生效项 - 若配置冲突,要么改
.editorconfig,要么禁用 EditorConfig 插件(Package Control → Disable Package)
最容易被忽略的是优先级链:文件内注释(如 # indent: 2) > 项目级 .editorconfig > 语法专属设置 > 全局设置。其中任一环存在,你的用户配置就可能静默失效。











