Sublime Text 的 reindent 命令仅按当前语法规则重对齐缩进,不修复语法错误、不调整括号或运算符、不处理空行与引号;需确保语法识别正确、缩进统一、末尾空格不被清理,否则失效。

Sublime Text 没有“自带自动排版”功能,所谓“免插件排版”仅限于极基础的缩进对齐,且必须满足三个苛刻前提:语法识别正确、缩进风格统一、末尾空格不被自动清理。
reindent 命令能做什么、不能做什么
它只做一件事:把当前选中行(或全文)按当前语法的缩进规则重新对齐。不会改括号位置、不调整运算符换行、不统一引号、不处理空行逻辑,更不会重排 JSON 或修复 JS 语法错误。
常见失效现象:Ctrl+Shift+P 输入 Reindent Lines 后无反应,或状态栏闪一下就结束——大概率是右下角显示 Plain Text;又或者文件里混用了 Tab 和空格,reindent 直接放弃处理。
- 必须先点击右下角语言名,手动设为
JavaScript、Python等具体类型,不能留Plain Text - 菜单
View → Indentation → Convert Indentation to Spaces,再选Indent Using Spaces(或全用 Tab,但不能混) - 设置里搜
trim_automatic_whitespace,设为false,否则格式化后末尾空格会被悄悄删掉
为什么 reindent 在 .py 文件里也常失灵
Python 对缩进极其敏感,reindent 要求文件本身语法合法、且所有缩进层级严格一致。如果某处多缩进了一格、某行用了 Tab 其他行用空格、或存在未闭合的括号,它就会静默跳过整段。
典型场景:你复制了一段从网页粘贴的 Python 代码,里面混着全角空格或不可见字符,reindent 不报错也不处理,看起来就像“没反应”。
- 先用
Ctrl+Shift+P运行Convert Indentation to Spaces统一缩进单位 - 打开命令面板输入
Set Syntax: Plain Text再切回Python,强制刷新语法识别 - 检查控制台(
Ctrl+)是否有IndentationError提示,有则说明代码本身不合法,reindent不会强行修
reindent 的快捷键和触发范围
默认无全局快捷键,需手动调用:Ctrl+Shift+P → 输入 Reindent Lines → 回车。它只作用于当前光标所在行,或你手动选中的文本块——没选中时才处理全文。
别指望它替代 black 或 prettier:一个只能把 if x: 下面的 print(y) 往右推四格,另一个能把整个函数重排成 PEP 8 合规样式。
- 想绑定快捷键?编辑
Preferences → Key Bindings,右侧加一行:{"keys": ["ctrl+alt+r"], "command": "reindent", "args": {"single_line": false}} -
"single_line": false表示支持多行;设为true则只对光标所在行生效 - 它不区分语言,但实际生效依赖右下角语法类型——
HTML文件里按这个键,效果可能完全不可预测
真正可靠的自动排版,始终要靠插件调用 prettier、black 这类外部工具;reindent 只是应急时刮掉浮层锈迹的砂纸,不是抛光机。最容易被忽略的一点:它根本不管你的代码有没有语法错误,只管缩进对齐——错的代码,对齐得再整齐,还是错的。


















