需用正则配合显示空白符定位清理不可见字符:sublime中右下角点lf/crlf→show whitespaces可临时显示¶、^m、→、·;默认开启需在settings–user加"draw_white_space": "all";替换前须启用正则模式,用\r(?!\n)精准清除多余\r;批量处理先转unix换行再清残留\r;注意编码与转义。

直接用正则 + 显示空白符组合,才能准确定位和清理不可见字符;光靠肉眼或普通查找基本无效。
怎么让 Sublime 显示 \r、\n、\t 和空格
不显示就根本看不见问题在哪。右下角状态栏点击 LF/CRLF 区域 → 选 Show Whitespaces,立刻看到:¶(\n)、^M(\r)、→(\t)、·(空格)。这个操作是临时的,关掉文件就失效。
想默认开启,打开 Preferences → Settings – User,加这行:
"draw_white_space": "all"
注意:"all" 会显示所有空白符,包括换行符;已打开的文件不会自动刷新,得手动重载(右键标签页 → Revert)或重新打开。
为什么 Ctrl+H 找不到 \r 但报错里有 “unexpected token”
因为默认关闭正则,\r 被当字面量处理,而很多编辑器/解释器实际读到的是 \r\n 或孤立 \r,尤其在 JSON、Python shebang 行、Git 提交时高频出问题。
- 按
Ctrl+H呼出替换面板 - 点右下角
.*按钮启用正则模式(不点等于白搭) - 在
Find栏输入:\r(?!\n)—— 这能精准匹配“后面不是\n”的\r,避开合法的\r\n -
Replace留空,点Replace All
别用 \r\n 直接替换成 \n,容易误伤二进制内容或字符串内合法的 \r。
批量清理混合换行符的稳妥三步法
跨平台协作后文件里常混着 \r\n、\n、甚至单独 \r,单靠一次替换不保险。
- 先统一转成 Unix 风格:右下角状态栏点击
CRLF→ 选Convert to Unix line endings - 再用正则清残留
\r:Ctrl+H→ 开.*→Find: \r(?!\n)→Replace:(空)→Replace All - 保存前确认右下角显示的是
LF,且draw_white_space是开着的,确保没漏掉隐藏\r
否则下次从 Git 拉代码,.gitattributes 里没配 * text=auto eol=lf,CRLF 又悄悄回来了。
常见错误现象和对应正则写法
报错提示模糊,比如 Invalid syntax 或 Unexpected end of input,大概率是不可见字符位置不对。
- JSON 文件末尾多一个
\r→ 查找:\r$(行尾的\r) - Python 第一行
#!/usr/bin/env python3\r导致解析失败 → 查找:^#!.*\r$ - 字符串中间混入
\r引发格式错乱 → 查找:(?(非转义的 <code>\r) - 缩进混用空格和 tab → 显示空白符后肉眼识别,或查
^ +→(行首空格后紧跟 tab)
正则里所有 \r、\n、\t 都必须用反斜杠转义;如果文件编码不是 UTF-8,GBK 下部分 Unicode 正则可能失效,优先改文件编码再操作。











