必须设"draw_white_space":"all"和"show_line_endings":true才能稳定显示·→¶^M;值须为英文双引号字符串,拼写、位置、格式任一错误均静默失效;保存后需切换标签页或按方向键触发重绘。

必须先让隐藏字符可见,否则查找就是盲人摸象——Sublime 默认不显示 \r、\n、\t、空格,直接搜根本找不到。
怎么让·→¶^M这些符号稳定显示出来
光点菜单里的“Show Hidden Characters”或按 Ctrl+Shift+P 输入 Toggle White Space 只是临时开关,关掉文件就失效。真正起作用的是改用户设置:
- 打开
Preferences → Settings – User,在右侧 JSON 中加这两行(缺一不可):{"draw_white_space": "all", "show_line_endings": true} -
"draw_white_space": "all"控制·(空格)、→(\t);"show_line_endings": true才能画出¶(\r\n)、↵(\n)、⌍(\r) - 值必须是英文双引号包裹的字符串
"all"和true,写成all(没引号)、"All"(大小写错)、draw_whitespace(拼错)都会静默失效 - 保存后已打开的文件可能不刷新,切换标签页或按一下方向键就能触发重绘
怎么用正则精准查 \r、\t、行尾多余空格
显示出来只是第一步,查和替换得靠正则模式(务必勾选 Regular Expression):
- 查所有
\r但不是\r\n的孤立回车(常见于 Windows 复制粘贴进来的文本):\r(?!\n) - 查所有
\t(只匹配真实制表符):\t;若想确认是否混用缩进,配合状态栏左下角提示看光标所在位置是tab还是space - 查行尾多余空格(含多个连续空格):
[ \t]+$;注意\t在这里也属于“行尾空白”,如果缩进用的是 Tab 就会误删——建议先统一转空格再清理 - 查开头/结尾纯空白行(含空格或 Tab):
^[ \t]*$
为什么搜 \r 没结果,但文件里明明有 ^M
不是正则写错了,是 Sublime 的换行符解析机制在干扰:
- 右下角状态栏显示
CRLF,不代表文件里每个\r都独立存在——它可能已被编辑器归并为换行逻辑的一部分,^M是渲染出来的视觉符号,不是原始字符 - 新建未保存的
untitled文件不会解析换行符,状态栏不显示LF/CRLF,^M也不出现;先Ctrl+S保存成真实路径再试 - 文件末尾缺换行符(
no newline at end of file)时,换行符推断不稳定,^M可能不渲染;保存一次再重开常能恢复 - 某些插件(如旧版
BracketHighlighter)会抢占状态栏区域,导致^M不显示——临时禁用插件验证
批量清理前先统一换行风格再动手
别一上来就全局替换 \r\n → \n,容易误伤字符串内合法的 \r:
- 先点击右下角
LF/CRLF区域 →Convert to Unix line endings,把整个文件转成LF(即只留\n) - 再用正则
\r(?!\n)查残留的孤立\r,替换成空 - 最后检查右下角是否显示
LF,且draw_white_space开着,确保没漏掉隐藏\r - Git 协作中要从源头堵住:在项目根目录加
.gitattributes,内容写* text=auto eol=lf
最易被忽略的一点:配色方案和字号会影响 · 和 → 的可见度——浅色主题下小字号会让 · 几乎看不见,优先调大 font_size(比如设为 14),比换主题更快见效。


















