^\s+ 是唯一靠谱的写法,因 ^ 锚定行首、\s+ 匹配一个及以上空白字符,避免零长度匹配和语法错误;必须启用 .* 模式且仅对选区操作,否则易破坏缩进与格式。

直接删所有行首空格,用 ^\s+ 正则替换最稳;但必须勾选右下角 .* 模式,且只对选中区域操作才安全——全文替换极易破坏注释、字符串缩进和配置项对齐。
为什么 ^\s+ 是唯一靠谱的写法
^\s+ 能精准咬住每行开头空白,原因很实在:
-
^锚定行首,确保不匹配行中或行尾的空格 -
\s+匹配一个及以上空白字符(含空格、\t),比手写[ \t]+更简洁、兼容性更好 - 不能用
\s*:它会匹配零长度,导致「Replace All」后插入大量空行 - 别信
^s+(少反斜杠):Sublime 直接不识别,查找框里显示「No matches」
操作时三个必踩的坑
错不在正则本身,而在面板设置和作用范围:
- 右下角
.*按钮必须点亮(启用正则),否则^\s+当纯文本处理,完全不生效 - 千万别全选全文后点 Replace All:注释行、YAML 键值对、JSON 字符串缩进、甚至 Python 的 docstring 缩进都会被扫荡,格式当场崩坏
- 想只处理某段代码?先用鼠标拖选,或按
Ctrl+L逐行选中目标行,再开替换面板——此时^\s+只在选区内起效
删完发现缩进错乱?大概率是 Tab/空格混用
行首空格被删后,如果代码块整体左移、Alignment 插件对不齐、甚至 Python 报 IndentationError,基本可断定原文件混用了 Tab 和空格:
- 菜单
View → Indentation → Convert Indentation to Spaces,把所有 Tab 强制转为空格 - 顺手关掉
Indentation → Detect Indentation,避免下次打开又自动切回 Tab - 这步做完再删行首空格,后续所有对齐、折叠、跳转行为才可靠
想同时删行首 + 行尾空格?顺序不能反
两步必须严格按顺序执行:
- 第一步:查找
^\s+,替换为空 → 干掉所有行首空白 - 第二步:查找
\s+$,替换为空 → 再干掉所有行尾空白 - 如果反过来,某些原本只有空格的行(比如纯空行或缩进行)会在第二步变为空,再执行第一步时就被整行清空
- 想一步到位?可用
^\s+|\s+$,但依然要分两次操作更可控——毕竟 Sublime 的「Replace All」不会自动跳过已修改过的行
真正容易被忽略的是:^\s+ 里的 ^ 和 $ 默认以换行符为界,但一旦误开右下角的 \n(即 . matches newline),锚点行为就失效了,整条规则可能匹配失控。











