正则 ^\s+ 是唯一可靠批量删除所有行首缩进的方法,因其精准匹配行首连续空白符(含空格、tab、unicode空白等),而快捷键如 ctrl+shift+k 仅作用于当前光标位置、不支持混合缩进识别且无法条件过滤。

直接删掉所有行首缩进,用 ^\s+ 正则替换最稳,不是快捷键能解决的批量任务。
为什么不能靠 Ctrl+Shift+K 或 Ctrl+K,Ctrl+Backspace
这些快捷键只作用于当前光标所在行,或单次操作——哪怕你开了多光标,Ctrl+Shift+K 也不会批量删所有行的缩进,它只会删每个光标位置“到行首”的内容,但前提是光标得在行中;如果光标在行首,就完全没反应。更麻烦的是:它们不区分缩进类型(空格 or tab),也不处理混合缩进(比如 2 个空格 + 1 个 tab),容易删一半留一半。
常见错误现象:
– 光标放在多行开头按 Ctrl+Shift+K,结果只有第一行被删
– 用 Ctrl+K, Ctrl+Backspace 手动逐行删,删到第 5 行发现 tab 没清干净,格式错位
– 想保留某些行的缩进(如 Python 的代码块),但快捷键无法加条件过滤
^\s+ 是唯一可靠匹配行首缩进的正则模式
^\s+ 表示“从行首开始、连续一个或多个空白字符”,它自动覆盖:
– 纯空格缩进( )
– 纯 tab 缩进(\t)
– 混合缩进( \t )
– Unicode 空格、NBSP 等(\s 包含所有标准空白符)
注意:
– 必须开启正则模式(点击替换面板右下角 .* 按钮,确保高亮为蓝色)
– ^ 和 $ 在 Sublime 中默认按行锚定,无需打开 . matches newline
– 别写成 ^[ \t]+:虽然也能用,但漏掉其他空白符(如 \f 或零宽空格),\s 更完整
操作步骤与关键细节
打开替换面板:
– Windows/Linux:Ctrl+H
– macOS:Cmd+H
执行两步(顺序不能反):
– Find What 填 ^\s+,Replace With 留空 → 点 Replace All
– 再把 Find What 改成 \s+$,同样留空 → 点 Replace All
为什么先删行首、再删行尾:
– 如果先删行尾,某些原本是 text 的行会变成 text;再删行首时,text 前的空格也被清掉,没问题;但若某行是 (纯空白),先删行尾后剩 ,再删行首就整行清空——这不是 bug,是逻辑必然,所以删行首必须优先
批量处理多个文件:
– 替换面板点右上角 In Files
– 输入路径(如 src/**/*.js)或留空扫整个项目
– 注意:它不会改只读文件,也不会跳过二进制文件(自动识别)
删完缩进后容易忽略的格式问题
清除缩进 ≠ 文本对齐完成。真正麻烦的往往在后面:
– Python 文件里,删掉所有缩进会导致语法错误(IndentationError),必须配合代码逻辑重排
– Markdown 或 YAML 中,缩进承载语义(如列表嵌套、键值对层级),盲目清空会让解析失败
– 某些日志或配置文本依赖缩进来对齐列,删完后列错位,得用列编辑模式(Ctrl+Shift+P → Column Select Mode)手动补空格
如果你其实想要的是「统一缩进」而非「全删」,别用 ^\s+,改用:
– 先选中目标段落
– Ctrl+Shift+P → 输入 Indentation: Convert to Spaces 或 Indentation: Set Indent Width
– 再手动缩进(Ctrl+] )或反缩进(Ctrl+[)











