sublime text批量删空格无一键链式操作,需据场景选列选区、正则或命令:行首用^[ \t]+(慎防误删缩进),行尾用\s+$,空行用^\s*$,均须启用正则且禁用. matches newline。

Sublime Text 本身没有“多行编辑 → 批量删空格”这种一键链式操作;所谓“多行编辑删空格”,实际是三种不同机制的误传混用:列选区删固定位置、正则替换删行首/行尾/全文件空格、或命令触发的上下文感知清理。选错方式轻则漏删,重则破坏缩进结构。
用 ^[ \t]+ 删除每行行首空格和制表符
这是最常用也最容易翻车的场景——你想统一去掉各行开头的缩进空白,但又不想动真正的代码缩进逻辑。
-
^[ \t]+中的空格不能省,\t是显式制表符,方括号内二者是“或”关系,不是占位符 - 必须勾选右下角
.*(启用正则),且确保.matches newline 未启用,否则^和$失效 - 执行前务必先点
Find All,看高亮是否只落在你预期的行首位置;混合缩进(空格+Tab)的文件里,它会全删,可能把原本该保留的缩进也干掉 - Python 或 YAML 文件慎用——
def foo():后面如果跟了空格,也会被^[ \t]+匹配到并删掉,导致语法错误
用 \s+$ 删除所有行尾空格(不含制表符)
\s+ 在 Sublime 中默认包含空格、\t、\r、\n,但 $ 锚定的是“行尾之前”,所以 \s+$ 实际匹配的是行末连续空白,包括制表符。不过要注意:
- 如果你只想删空格(不碰
\t),得写成+$(末尾带一个空格) - 这个正则对
Makefile是危险的——它的缩进必须是\t,删掉会导致make报错missing separator -
trim_trailing_white_space_on_save设置只影响保存动作,不响应手动Replace All,别指望它帮你兜底
列选区(Column Selection)删固定列位置的空格
当你面对的是对齐表格、日志字段或 CSV 数据,想“竖着”删第 5 列所有空格时,正则反而绕远路,列选区更直接:
- 按住
Alt(Windows/Linux)或Cmd+Shift(macOS),鼠标从第一行第 5 列拖到最后一行第 5 列,松手后直接按Delete - 如果行数太多拖不动:先
Ctrl+L全选所有行 →Ctrl+Shift+L拆成行末光标 →Ctrl+→移动光标到目标列 →Ctrl+Shift+↓向下扩展列选区 - 列选区不认内容,只认光标坐标,所以 Tab 宽度(4 还是 8)会影响实际删除范围;建议先
View → Indentation → Convert Indent to Spaces统一为空格再操作
为什么不用 ^$ 或 \n\n 删空行?
很多人搜“删空格”结果误点进“删空行”教程,然后抄了 ^$ 就跑,结果发现带空格的空行根本没删掉——因为 ^$ 只匹配“绝对空”的行。
- 真正能清掉“伪空行”(含空格/
\t/全角空格)的是^\s*$,但必须关掉. matches newline,否则\s会跨行吞内容 -
\n\n在 Windows 的\r\n文件里基本不生效,而^\s*$天然兼容所有换行格式 - 网页粘贴来的文本常含
\u200b(零宽空格)、\u3000(全角空格),\s不覆盖它们,得手动加进正则:^[\s\u200b\u3000]*$
真正麻烦的从来不是正则怎么写,而是你删的到底是“无意义空白”,还是“语义性缩进”或“格式对齐必需字符”。删之前,先开 View → Show White Space 看一眼,比盲目 Replace All 安全十倍。











