最可靠方式是用正则^[ \t]+匹配并删除行首任意数量空格或tab,替换框留空;因^\s+会误匹配\r导致换行错乱,^ +则无法处理tab混合缩进。

如何用正则匹配并删除所有行首空格
Sublime Text 删除行首空格最可靠的方式是用正则替换,而不是手动或用缩进命令——因为 ^ (行首加一个空格)只能删单个,而实际缩进可能是 2、4、8 个空格,甚至混有 Tab。必须用能匹配“行首任意数量空白字符”的正则。
打开替换面板(Ctrl+H / Cmd+H),勾选 .*(正则模式),在查找框填:^[ \t]+
替换框留空。点击 Replace All 即可。
-
^锁定行首位置 -
[ \t]匹配空格或 Tab 字符(注意:Tab 是\t,不是\s,因为\s在 Sublime 正则中会额外匹配换行符,导致误删) -
+表示“一个或多个”,确保整段缩进被清掉
为什么不用 ^\s+ 或 ^ +
这两个写法在 Sublime 中都有明显缺陷:^\s+ 会把 Windows 换行符 \r 也当作空白匹配,导致替换后文件末尾多出异常 \r 或换行错乱;^ + 只能删纯空格缩进,遇到 Tab 或空格+Tab 混合缩进就完全失效。
尤其常见于从 IDE 复制过来的代码,或团队协作中不同编辑器混用的情况——看似是“缩进”,实际是 \t 和 的组合。
- 如果项目用的是 Tab 缩进,应改用:
^\t+ - 如果想同时清理空格和 Tab(但保留行内空格),必须写成:
^[ \t]+,不能省略方括号里的空格 - Sublime 的正则引擎不支持
\h(水平空白),所以别尝试
批量处理时如何避免误伤注释或字符串内的空格
正则 ^[ \t]+ 本身只作用于行首,不会动到行中内容,所以注释开头的空格(如 # hello)、字符串内的空格(如 " hi ")完全不受影响——这点比很多 IDE 的“trim whitespace”功能更安全。
但要注意一种例外:多行字符串开头若被缩进(比如 Python 的三引号字符串),其第一行的缩进也会被删。如果你正在编辑这类内容,建议先手动选中目标区域再执行替换,而不是全文件操作。
- 快捷键
Ctrl+Shift+P→ 输入Selection: Expand Selection to Line可快速选中多行 - 选中后按
Ctrl+H,勾选正则,再替换,范围可控 - 替换前务必
Ctrl+Z预留撤回路径,Sublime 的正则替换不可预览
删除行首空格后缩进风格怎么统一回来
删完只是“清空”,不代表自动重排版。如果后续需要统一为 4 空格缩进,不能靠再次正则硬塞——得交给 Sublime 的缩进系统:
- 选中文本 → 右键 →
Indentation → Convert Indentation to Spaces - 再右键 →
Indentation → Indent Using Spaces,然后设为 4 - 或者直接修改状态栏右下角的缩进显示(如显示
Tab Width: 4),点击它可快速切换
注意:这些操作只对已选中文本生效;如果没选中,会作用于整个文件——而你刚删过行首空格,此时全文缩进其实是“零”,再转空格就会让所有代码贴到左边界。所以顺序很重要:先删行首空白,再选中需要重缩进的代码块,最后转换。
真正容易被忽略的是:Sublime 不会自动识别项目级缩进配置(比如 .editorconfig)。如果团队有规范,记得手动设置或安装对应插件,否则每次打开新文件又会回到默认 Tab 宽度。










