最稳批量删行首缩进的方法是正则^\s+,需开启正则模式后Replace All;但Python/YAML/Markdown等依赖缩进的文件盲目删除将破坏语法结构,应慎用或改用Ctrl+] / Ctrl+[调整。

用 ^\s+ 正则批量删行首缩进最稳
快捷键 Ctrl+Shift+K 或 Ctrl+K, Ctrl+Backspace 只作用于当前光标所在行,多光标下也不可靠,更无法识别混合缩进(比如空格+tab)。真正能批量、精准、兼容 Unicode 空白符的,只有正则 ^\s+。
打开替换面板(Ctrl+H / Cmd+H),确保右下角 .* 按钮高亮为蓝色(即开启正则模式),然后:
-
Find What填^\s+,Replace With留空 → 点Replace All - 必须先做这一步:如果先删行尾再删行首,某些纯空白行可能被误判为“可删”,导致整行消失
-
\s比[ \t]更完整,它包含 tab、空格、换页符、零宽空格等所有标准空白字符 - 别写成
^[ \t]+—— 它漏掉 NBSP(\u00a0)等常见隐形空格,Python 或 YAML 文件里容易出错
删完缩进后,Python 和 YAML 很可能直接报错
盲目清空行首缩进不是“清理”,是破坏语义。Python 依赖缩进定义代码块,YAML 用缩进表达嵌套层级,Markdown 列表也靠缩进对齐。删完不重排,等于把结构全打散。
常见翻车场景:
- Python 文件里
if块缩进全没了 → 保存时报IndentationError: expected an indented block - YAML 中
env:下的键值对缩进被清空 → 解析器认为所有字段都在顶层,配置失效 - Markdown 有序列表(
1. item)前的缩进没了 → 渲染成普通段落,编号丢失 - 想保留某几行缩进(如注释块对齐),但正则没条件过滤能力,只能手动恢复
想安全调整缩进,优先用 Ctrl+] 和 Ctrl+[
Tab 和 Shift+Tab 在 Sublime 里本质是补全触发器,不是缩进命令——光标在字符串内、函数名后或有 Emmet 提示时,按了只会弹菜单。
Ctrl+](增缩进)和 Ctrl+[(减缩进)才是专用于缩进的原生命令,行为确定:
- 未选中内容时,只影响当前行
- 选中多行时,统一增/减一档(由
tab_size和translate_tabs_to_spaces决定) - 对
.json、.md、.txt这类无语法约束文件同样生效 - 不分析语法、不自动对齐倍数、不触发补全,纯粹改行首空白
如果按了没反应,先检查右下角语法标识是否准确(比如 Vue 的 <script> 块常被误判为 HTML),再确认是否开了 detect_indentation(默认 true)——它会锁死历史缩进风格,覆盖你的设置。
批量处理多个文件?别信菜单,用命令行
Sublime 原生不支持跨文件批量缩进转换。View → Indentation 菜单、命令面板里的 Convert Indentation to Spaces 都只作用于当前视图,选中多个标签页也没用。
真要批量处理(比如整个 src/ 目录下的 .py 文件),得靠外部工具:
- Linux/macOS 下用
expand(POSIX 标准):find src/ -name "*.py" -exec expand -t 4 {} \; -exec mv {} {}.tmp \; -exec mv {}.tmp {} \; - Python 脚本更可控但风险高:
python3 -c "import pathlib; [p.write_text(p.read_text().replace('\t', ' '*4)) for p in pathlib.Path('src').rglob('*.py')]"—— 注意:这会无差别替换所有\t,包括字符串内的,务必先git add -N预览变更 - 任何批量操作前,必须确认项目没被
.editorconfig锁死(比如含indent_style = tab),否则 Sublime 设置和命令行都可能失效

















