Sublime Text无“自动排版缩进”,仅有auto_indent(回车继承上行缩进)和Reindent(按语法重算缩进层级);二者均不理解语义,需协同配置tab_size、translate_tabs_to_spaces、detect_indentation,并按语法专属设置生效。

Sublime Text 没有“自动排版缩进”功能,只有“自动缩进”(auto_indent)和“结构重排缩进”(Reindent),二者完全不同。你想要的“保存时自动对齐代码块”,它不支持——除非装插件或配合外部格式化工具。
auto_indent 是什么?它只管回车后对齐上一行
这是 Sublime 原生唯一能“自动”的缩进行为:auto_indent 控制按 Enter 后新行是否继承上一行缩进,比如在 if True: 后回车,下一行自动缩进一层。
- 必须确保用户设置中显式启用:
"auto_indent": true(默认是 true,但常被误关) - 它不分析语法结构,也不修复已有代码;只看光标所在行的开头空白,原样复制过去
- 若右下角语法识别错误(如 .vue 文件里
<script></script>块显示为 HTML),auto_indent会直接失效 - 它完全依赖
tab_size和translate_tabs_to_spaces的当前状态——如果这两项没生效,auto_indent回车后插的仍是\t,不是空格
Reindent 不是自动格式化,而是按当前规则重算缩进层级
View → Indentation → Reindent(快捷键 Ctrl+Shift+I)是 Sublime 最接近“排版”的操作,但它不理解代码语义,只做两件事:
- 根据当前语法(如 Python、JavaScript)的括号/冒号/关键字规则,估算每行应有的缩进级别
- 用当前生效的
tab_size和translate_tabs_to_spaces设置,把该行缩进替换为对应数量的空格或\t - 不会修改字符串、注释、多行字面量里的空白,也不会调整行内对齐(如字典 key 对齐、参数换行缩进)
- 若文件存在混用缩进(
Indentation: Mixed),菜单会灰掉——必须先执行Convert Indentation to Spaces再试
为什么你设了缩进参数,Reindent 还是错?三个关键开关必须协同
真正让 Reindent 输出预期结果的,从来不是单个配置,而是这三个参数同时生效且不被覆盖:
-
tab_size:数字,比如4,定义一个缩进单位等于几个空格 -
translate_tabs_to_spaces:布尔值,必须为true,否则Reindent仍会输出\t -
detect_indentation:必须设为false,否则打开文件瞬间就被内容“猜”走缩进规则,Reindent就按错的规则重排
而且——Python、JS、JSON 等语言的语法专属设置(Python.sublime-settings、JavaScript.sublime-settings)优先级高于全局用户设置,你得分别进去配,不能只改 Preferences → Settings – User。
真想保存时自动排版?别硬刚原生功能
Sublime 原生不支持 onSave 触发格式化。可行路径只有两条:
- 装插件:
JsPrettier(JS/TS)、PythonTidy(Python)、SublimeLinter+ESLint配合自动修复(需 Node/Python 环境) - 用外部工具:配置
Build System调用black、prettier或clang-format,绑定到快捷键(如Ctrl+Alt+L),手动触发 - 注意:
trim_automatic_white_space会在保存时删行尾空格,但它不是排版,也动不了缩进逻辑
最常被忽略的一点:哪怕你配齐所有参数,Reindent 对嵌套过深、非标准语法(如 Jinja2 模板、Vue SFC 的 scoped style)或混合缩进残留的文件,依然可能输出意外结果——它只是“重算”,不是“理解”。

















