Sublime中“去除所有多余空格与制表符”需分场景处理:①行首用^[ ]+;②行尾用[ ]+$(关掉. matches newline);③中间压缩用[ \t]{2,}→ ;④伪空行用^[ \t\r\n]*$;⑤全角/零宽空格需额外添加。

直接说结论:Sublime 里「去除所有多余空格与制表符」不是单一操作能搞定的,因为“多余”本身没有统一定义——是删行首?行尾?中间连续多个?还是只留一个?必须按场景拆解,否则容易误删缩进、破坏代码结构或粘连文本。
删行首空格和制表符:用 ^[ ]+
这是最常被需要、也最容易出错的操作。
-
^[ ]+中的空格字符不能省,[ ]表示“空格或制表符”,不是占位符;漏掉空格就只删 Tab,删不掉空格 - 它会匹配每行开头连续出现的空格/Tab,但不会碰行中或行尾的——适合清理粘贴进来的缩进混乱文本
- 如果文件混用空格+Tab做缩进(比如 Python 项目),执行前务必先
Find All看匹配数;误删可能导致语法错误 - 别用
^ +(末尾带空格)去“只删空格”,它在 Sublime 里实际会匹配行首一个空格+后面任意字符,行为不可控
删行尾空格和制表符:用 [ ]+$,且必须关掉 . matches newline
这是唯一安全的写法,s+$ 在 Sublime 里会吞换行符,导致上下两行“粘连”。
-
[ ]+$明确限定只删行尾的空格和 Tab,$锚定在换行符前,不会跨行 - 右下角那个
图标(即. matches newline)必须关闭——一旦点亮,+就可能一路吞到下一行开头,return true; if (x)可能变成return true;if (x) - 长期建议开启自动清理:在
Preferences → Settings – User里加这两行:"trim_trailing_white_space_on_save": true"trim_automatic_white_space": true
删中间连续空白(如多个空格变一个):用 [ ]{2,} 替换为单个空格
这不是“去多余”,而是“压缩”——保留语义分隔,去掉视觉冗余。
-
[ ]{2,}匹配两个及以上连续的空格或 Tab,替换为(一个空格)即可 - 不要用
s{2,}:它会把换行符也卷进来,hello world可能被压成hello world,段落全乱 - 如果目标是纯文本(非代码),且想保留换行逻辑,可分两步:
先用[ ]+替换为单个空格
再用+(一个空格)替换为单个空格,避免残留
删“伪空行”里的空白字符:用 ^[
]*$,而非 ^s*$
很多所谓“空行”其实含空格、Tab 或回车,^s*$ 在某些编码或 BOM 文件里会失效。
-
^[ ]*$显式列出所有可能的空白字符,兼容性更强,尤其对 UTF-8 with BOM 或 Windows CRLF 文件 - 替换框必须为空——填
或空格会导致“越删越多”,因为 Sublime 会把换行符当内容补上 - 删完后检查文件末尾:如果最后一行是空但无结尾换行符(EOF 前无
),^[ ]*$不会匹配它;需手动用Ctrl+Shift+K删除该行 - 真正难处理的是全角空格(
u3000)、零宽空格(u200b)等,它们不在[ ]范围内,得单独加:^[ u3000u200bu00a0]*$
正则本身没智能,它只认字符。所谓“多余”,其实是你对格式意图的判断——删之前先 Find All 看匹配范围,比盲目 Replace All 安全十倍。

















