最稳批量删行首缩进的方法是正则^\s+:它精准匹配行首一个或多个空白符(含空格、tab、Unicode空白),覆盖所有缩进类型;而快捷键仅作用单行且不识别混合缩进。

用 ^\s+ 正则批量删行首缩进最稳
快捷键如 Ctrl+Shift+K 或 Ctrl+K, Ctrl+Backspace 无法批量处理——它们只作用于当前光标所在行,且不识别混合缩进(比如空格+tab),更没法加条件过滤。真正能覆盖所有情况的只有正则:^\s+。
它精准匹配「行首开始、一个或多个空白字符」,自动涵盖:
- 纯空格、纯
\t - 空格+tab 混合缩进
- Unicode 空白符(如
\u00A0、\f)
操作步骤:
- 打开替换面板:
Ctrl+H(Windows/Linux)或Cmd+H(macOS) - 点击右下角
.*按钮启用正则模式(确保高亮为蓝色) -
Find What填^\s+,Replace With留空 → 点Replace All
别写成 ^[ \t]+:漏掉非 ASCII 空白符;也别勾选 . matches newline,否则 ^ 失效。
Python 文件里不能盲目清缩进
删掉所有 ^\s+ 后,Python 会立刻报 IndentationError——因为缩进是语法的一部分,不是“多余”内容。这时候你不是在清理,是在破坏结构。
安全做法分场景:
- 想重排代码块:先用
Shift+Tab多行减缩进(Sublime 自动识别当前缩进类型),再按需用Tab补回 - 想统一缩进风格:关掉
detect_indentation,设translate_tabs_to_spaces: true,再手动执行Convert Indentation to Spaces - 只想清理注释/空行前的缩进:把目标行先用多光标选中(
Ctrl+Click或Ctrl+D),再运行^\s+替换
注意:^\s+ 会吃掉 # comment 前的缩进,但不会动 return x 前的缩进——后者属于语句内空格,\s 不会跨过非空白字符匹配。
行尾空格和空行要分开处理
^\s+ 只管行首,行尾和空行得另起炉灶。尤其不能用 ^\s*$ 一键删空行:它会误杀 Markdown 段落间距、YAML 键值对层级,还漏掉 EOF 前无换行符的“真空行”。
推荐组合策略:
- 先清行尾:
Ctrl+Shift+P→ 输入Trim Trailing White Space(内置命令,安全) - 再压空行:查找
\n\s*\n\s*\n+,替换成\n\n(压缩 ≥3 行空行为双换行) - 最后择机手动删单空行:比如函数之间留一行,类定义前后留两行——靠正则做不到,得人眼判断
如果已配 "trim_trailing_white_space_on_save": true,保存时自动清行尾,就不用每次手动跑命令。
批量处理多个文件时注意边界
在替换面板点 In Files 可扫整个项目,但有硬限制:
- 只读文件跳过,二进制文件自动过滤(如
.png、.zip) - 路径支持 glob:
src/**/*.py有效,但**/*.py在某些系统可能不展开 - 不会递归处理符号链接指向的目标,除非显式写明路径
最关键的是:它不做语义校验。比如对 .env 文件批量删 ^\s+,可能导致 KEY = value 变成 KEY=value(某些解析器要求等号前后有空格)。这类文件建议排除或手动确认。

















