^\s+ 比 ^ + 更可靠,因其能匹配空格、制表符、全角空格及各类空白符,且要求至少一个字符,避免误删空行;而 ^ + 仅匹配半角空格,易漏缩进。

直接用正则 ^\s+ 替换为空即可,但必须勾选「正则表达式」模式,否则 ^ 和 \s 都当字面字符处理,完全不生效。
为什么 ^\s+ 比 ^ + 更可靠
^\s+ 能匹配空格、制表符 \t、全角空格、甚至换行符类空白(\r\n\f\v),而 ^ + 只认半角空格,漏掉制表符就白干;\s+ 要求至少一个空白字符,不会误匹配空行本身(空行没“行首空白”可删);实际中常见代码缩进混用空格和 \t,^\s+ 一把清掉,不用来回切模式。
替换前必须确认的三件事
- 确保「搜索模式」是
正则表达式,不是「普通」或「扩展」——^和\s在后两者里无效 - 先按
Ctrl + F输入^\s+,点「全部高亮显示」,看哪些行真被选中——尤其注意首行是否含 UTF-8 BOM(\xEF\xBB\xBF),它不算\s,得单独先删 - 如果文件只读(右下角状态栏标着「只读」),命令会静默失败,需先右键文件属性取消只读
删完发现对齐乱了?大概率是这些坑
常见错误包括:^\s* 写成 ^\s*(* 允许零长度匹配,可能触发空行误判);替换框里不小心填了个空格,结果每行前面多出一个空格;用了 . 匹配换行符 选项,导致 .* 跨行吞内容;想一并删行尾空格却没分步操作——^\s+ 不动行尾,得另跑一次「编辑 → 行操作 → 删除尾部空白」才干净。
想保留缩进而只删多余空格?得换思路
纯正则做不到智能缩进判断。如果目标是「把每行缩进统一为 2 个空格」,不能靠删,得用「查找 → 替换」配合捕获组:^(?!\s{0,2}$)\s+ 匹配非 0–2 个空白的行首空白,再替换为两个空格;但更稳的做法是先删光 ^\s+,再用「编辑 → 行操作 → 增加缩进」两次——后者不依赖正则,也不怕不可见字符干扰。
真正麻烦的从来不是正则怎么写,而是你面对的文本里混了多少种空白:BOM、零宽空格、全角空格、混合制表符……它们不会报错,只会悄悄让替换结果和预期差那么一点。

















