Sublime多行替换中\n搜不到换行是因为正则模式未启用,右下角.*图标未变蓝;\n仅匹配LF,跨平台应改用\R;替换框需用Ctrl+Shift+Enter(Win/Linux)或Control+Command+Enter(macOS)插入真实换行,不可输\n。

Sublime多行替换里\n为什么搜不到换行?
因为默认不启用正则模式,\n 在查找框里就是两个普通字符,不是换行符。右下角的 .* 图标没变蓝,就代表正则没开,搜什么换行都白搭。
必须先按 Ctrl+H(或 Cmd+H),再点右下角 .* 激活正则——变蓝才算生效。验证很简单:输 \d+ 能高亮数字,说明正则已就位。
注意:\n 只匹配 LF 换行;Windows 文件常用 \r\n,单用 \n 会漏掉。更稳写法是用 Sublime 内置的 \R(仅限查找):^\s*$\R 删空行,跨平台兼容。
替换框里怎么插真实换行?
\n 在替换框里不会被解析,只会原样输出为字面的反斜杠+n,容易污染 JSON 或 JS 字符串。
正确做法是用快捷键插入真实换行符:
- Windows/Linux:
Ctrl+Shift+Enter - macOS:
Control+Command+Enter
想插两个换行?连按两次快捷键,不是输 \n\n。另外,\R 不能用在替换框里——它只支持查找阶段。
为什么^和$加换行总出错?
问题大概率出在 . matches newline(那个 ↩ 图标)被误勾选。一旦启用,. 就能跨行匹配,^ 和 $ 失效,整个正则逻辑就乱了。
所有涉及 ^、$、^(\s*) 的操作,务必确认 ↩ 图标未激活。
常见安全用法:
- 给每行末尾加换行:查
$,替为快捷键插入的换行符 - 给每行开头加换行但避开首行:手动选中第二行起的所有行再操作
- 保留原始缩进:用捕获组,比如
^(\s*)foo→$1bar,否则新内容全顶到左缘
删空行+加间隔,为什么不能一条正则搞定?
因为 \n 在正则中既是内容又是锚点边界,混用极易失控。比如搜 ^\s*$\n 替成 \n,结果可能漏匹配、吃掉缩进,甚至把 if (x) { 后面的换行也干掉。
必须分两步:
- 先删空行:查
^\s*$\R,替为空 - 再加间隔:查
$,替为快捷键插入的换行符
最后清理末尾多余换行:查 \R$ 替为空,确保文件以单个换行结尾——否则 Git 会报 no newline at end of file。还有个坑:\R 不能放进字符类,[R] 是非法语法,\R\n 会直接报错。
最常被忽略的是当前文件的 line_ending 设置:右下角显示什么(LF 还是 CRLF),最终保存的就是什么。批量操作前不确认,改完才发现格式全错了。

















