必须用^\s*$正则配合关闭“. matches newline”、替换框留空,才能精准删除所有空行(含伪空行);^$漏删缩进空行,\n\n跨平台失效,^\s*\n会导致代码粘连。

不能用“一键清除页面多余空格”这种笼统操作——它必然误删缩进、破坏语法,甚至让 Python 报 IndentationError。真正安全的做法是分场景、分位置处理:行尾空白用配置自动清,行首空白用正则精准控,整行空白(含伪空行)必须靠 ^\s*$ 正则+手动校验。
怎么选中当前行所有空白字符(包括空格、Tab、不可见 Unicode)
Sublime 没有原生命令直接“选中本行所有空白”,但可快速可视化 + 手动框选:
- 按
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS),输入toggle_whitespace回车,开启空白字符高亮(空格显示为·,Tab 为→) - 将光标移到目标行任意位置,按
Ctrl+L(Win/Linux)或Cmd+L(macOS)选中整行 - 再按
Ctrl+Shift+Right(Win/Linux)或Cmd+Shift+Right(macOS)逐词向右扩展选区,直到只框住空白部分(避开代码/文本) - 若该行是“伪空行”(含
\u200b、\u3000等),需先用Find面板搜[\u200b\u3000\u00a0]单独定位
为什么不能用正则 \s+ 替换为空来“一键清空格”
因为 \s 在 Sublime 中默认匹配空格、\t、\r、\n、\v,无差别替换会直接崩掉关键结构:
- Python 缩进(4 个空格)会被当
\s+清掉,变成IndentationError: unindent does not match any outer indentation level - YAML 对齐字段(如
name: Alice)中冒号后空格被删,导致解析失败 - Makefile 变量赋值(
CC = gcc)中=前后空格被删,CC=gcc将无法展开变量 -
\s不包含\u200b(零宽空格)、\uFEFF(BOM),看似清完了,粘贴到 Git 或 CI 环境仍报错
删行尾空格和 Tab 的最稳路径:开配置,别手点
不是每次保存都手动按 Ctrl+Shift+P → Trim Trailing White Space,而是让它自动生效:
- 打开
Preferences → Settings – User,在右侧 JSON 中添加:"trim_trailing_white_space_on_save": true - 确保该键值是布尔类型
true(不加引号),且 JSON 格式合法(逗号不能多不能少) - 该配置只清理每行末尾的连续空格/
\t,完全放过缩进、空行、行中空格 - 如果想编辑中实时响应(非仅保存时),额外加一行:
"trim_automatic_white_space": true - 注意:某些语法(如
text.markdown)可能禁用此行为,右下角切为Plain Text可验证是否生效
删“伪空行”(含全角空格、零宽空格)必须手写正则
网页、Excel、微信粘贴过来的空行常藏 \u200b、\u3000、\u00a0,^\s*$ 默认不匹配它们:
- 打开
Ctrl+H,确认右下角.*已点亮、\n图标未高亮(即禁用. matches newline) - 查找框填:
^[ \t\r\n\u200b\u3000\u00a0]*$(显式列出所有常见隐形空白) - 替换框必须彻底留空(不填
\n、不填空格、不填任何字符) - 点
Find All先看匹配数;若超 5000 行,建议分段操作,避免卡死 - 文件末尾无换行符时,最后一行“伪空行”不会被
^/$匹配,需手动移到行首按Ctrl+Shift+K删除整行
真正容易被忽略的是:删完后文件末尾是否保留换行符(Unix 标准要求 EOF 前有 \n),以及 Markdown 中两个空格+换行构成的硬换行是否被误伤——这些没法靠正则自动判断,得人眼扫一遍末尾三行。

















