必须设"draw_white_space":"all"才能稳定显示空格(·)、制表符(→)和行尾空白;需写在Preferences→Settings–User右侧JSON中,值须为英文双引号包裹的字符串"all",配置项名拼写准确,否则静默失效。

怎么让空格和制表符“显形”
空格看不见,所以第一件事是让它能被肉眼识别。Sublime 默认不显示空白字符,必须手动打开可视化开关。
操作很简单:Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 toggle_whitespace 回车。或者走菜单:View → Show White Space。
开启后,你会看到:
- 空格变成
·(中间点) - Tab 变成
→(右箭头) - 换行符变成
¶(段落符号)
这样一眼就能分辨哪些是真·空格、哪些是缩进用的 Tab、哪些是行尾多余空格——而不是靠猜。
为什么不能只搜 \s 定位所有“空格”
\s 看似全能,但它在 Sublime 里默认匹配 (空格)、\t、\r、\n、\v 五种字符。问题在于:你通常只想删行尾的空格和 Tab,不是把缩进、对齐、换行全干掉。
比如 Python 文件里,\s 会把 def foo(): 后面的缩进也当“空格”标出来;YAML 对齐用的空格也会被高亮,误删直接破坏结构。
真正要定位“无用空格”,得限定范围:
- 行尾多余空格和 Tab → 用
[ \t]+$ - 整行只有空白(伪空行)→ 用
^\s*$ - 全角空格(
\u3000)、不间断空格(\u00a0)、零宽空格(\u200b)→ 单独搜\u200b或用[ \t\u00a0\u3000]+$
怎么精准定位并确认行尾空格
行尾空格最难察觉,因为光标停在行末时你看不出它是否存在。靠 toggle_whitespace 是第一步,但还要配合正则验证。
打开替换面板(Ctrl+H),启用正则(点右下角 .* 图标),务必关闭右下角那个 \n 图标(即禁用 . matches newline)。
在 Find What 框填:[ \t]+$
这个表达式只匹配「行末连续一个或多个空格或 Tab」,不会跨行、不会吃掉换行符,也不会误伤缩进。
点 Find All,右下角会显示匹配数。如果数字远大于你预期的“脏行数”,说明有些行尾混了不可见字符,得检查是否粘贴自网页或 Excel。
文件末尾没换行符时,最后一行的空格怎么查
Sublime 对 EOF(文件末尾)前无换行符的处理很特殊:最后一行即使全是空格,[ \t]+$ 也可能不匹配,因为引擎认为它没有“行尾”锚点。
这时有两个办法:
- 先把光标移到最后一行开头,按
Ctrl+Shift+K(Windows/Linux)或Cmd+Shift+K(macOS)删整行——它会连同隐形字符一并清除,并自动补上换行符 - 手动把光标挪到行末,看有没有
·显形;如果有,就说明存在行尾空格,但正则没捕获到,只能靠删整行解决
别用 Delete 或 Backspace 去“擦”,它们只删光标前字符,极易留下 \u200b 这类零宽字符,看着干净,实则埋雷。


















