自动缩进生效需同时满足三个条件:auto_indent为true、语法识别正确、tab_size与translate_tabs_to_spaces协同生效;缺一不可,否则回车仍顶格。

自动缩进不是“开了就灵”,必须同时满足三个条件:auto_indent 为 true、语法识别正确、缩进参数(tab_size + translate_tabs_to_spaces)已生效。缺一不可,否则回车还是顶格。
auto_indent 是开关,不是装饰
Sublime 默认开启 auto_indent,但很多人无意中把它关了——结果按回车新行不缩进,还以为编辑器坏了。
- 打开
Preferences → Settings,右侧用户设置里确认有:"auto_indent": true - 如果被注释掉或值为
false,删掉注释并设为true - 改完保存即生效,不用重启;测试方法:在
if True:后按回车,下一行应自动缩进 -
auto_indent只管“换行时对齐上一行”,不修复已有代码的缩进错误
语法识别错,自动缩进直接失效
右下角显示 “Plain Text” 却在写 Python?那 auto_indent 就不会触发冒号后的缩进逻辑,Reindent 命令也完全没反应。
- 点击右下角语法名(如 “Plain Text”),从列表选对应语言(比如 “Python”)
- 快捷键更直接:
Ctrl+Shift+P输入Set Syntax: Python回车 - 验证方式:输入
def foo():换行,光标应自动缩进;若没反应,90% 是语法没切对 - Vue 的
<script></script>块常被误判为 HTML,点语法名手动切到JavaScript再试
Tab 键插空格还是 \t?关键看三参数协同
只设 tab_size 不够,translate_tabs_to_spaces 被覆盖才是按 Tab 还出 \t 的真正原因。
- 必须在用户设置中同时写入:
"tab_size": 4、"translate_tabs_to_spaces": true、"detect_indentation": false -
detect_indentation默认为true,打开文件瞬间就扫描前几行,把你的配置悄悄覆盖掉(比如旧文件用 2 空格,它就强制改成 2) - Python 文件还要单独配:打开 .py 文件 → 右下角点语法名 →
Open Syntax Specific Preferences→ 写入同样三行 - 已打开的 .py 文件需
Ctrl+Shift+P输入Reload Syntax才刷新生效
已有代码缩进混乱,不能 Ctrl+A 直接缩进
混用空格和 Tab 的文件,直接全选再按 Ctrl+] 会误缩字符串里的 \t 或对齐注释,导致语法错误。
- 先确认右下角显示
Spaces: 4(不是Tab) - 菜单执行
Convert Indentation → To Spaces:只处理行首缩进,不动字符串内内容 - 再执行
Indentation → Reindent:让 Sublime 按当前语法结构重排缩进层级 - 如果状态栏提示
Mixed indentation detected,说明检测到混用,必须先手动清理几行再重试
最常被忽略的是:语法专属设置优先级高于全局设置,而 detect_indentation 在文件打开瞬间就劫持二者。三者不协同,改了也像没改。











