^\s+|\s+$ 是首选正则,因它精准匹配行首行尾空白且跨平台兼容;但需关闭“. matches newline”,否则失效;误写为^s+|s+$或用\s*会导致匹配失败或全文变空。

直接用 ^\s+|\s+$ 一次性替换最高效,但必须关掉 . matches newline(即不勾选 ↩ 图标),否则整套逻辑失效。
为什么 ^\s+|\s+$ 是首选正则
^\s+ 匹配行首一个及以上空白(含空格、\t、\r、\n),\s+$ 匹配行尾同理,| 表示“或”,两者合并就能覆盖首尾。Sublime 的 \s 在所有平台都兼容换行符类型,不用区分 \r\n 还是 \n。别写成 ^s+|s+$(少反斜杠),Sublime 直接不识别;也别用 \s*,它会匹配零长度,导致每行被替换成空字符串,整篇变空。
操作前必须检查的三项设置
右下角 .* 图标必须点亮(启用正则)
左下角 ↩ 图标一定不能点亮(禁用 . matches newline)
替换框必须彻底留空——填了空格、\n 或不可见字符,结果会更乱
删完发现缩进崩了?大概率是 Tab/空格混用
行首空白被清掉后,如果 Python 报 IndentationError,或 YAML 键值对错位,说明原始缩进不是纯空格或纯 Tab:
菜单 → View → Indentation → Convert Indentation to Spaces 先统一转为空格
顺手关闭 Detect Indentation,避免下次打开又自动切回 Tab
再跑一遍 ^\s+|\s+$,缩进结构才可控
真正容易被忽略的点:末尾空行和全角空白
文件末尾若没有换行符(EOF 前停在空行),^\s+$ 就匹配不到它;
网页粘贴或 Excel 导出的内容可能含 \u3000(全角空格)、\u200B(零宽空格),\s 不覆盖这些;
需要清理时,把查找内容换成:^[\s\u200b\uFEFF\u00a0\u3000]*$,再分两步执行首尾清理

















