必须开启正则模式(点右下角.*图标变蓝),否则\n被当字面字符;查找用\R兼容跨平台换行,替换须用Ctrl+Shift+Enter(Win/Linux)或Control+Command+Enter(macOS)插入真实换行符。

查找框里输 \n 为什么没反应
因为正则模式根本没开。Sublime 默认把 \n 当两个普通字符——反斜杠和字母 n,不是换行符。哪怕你写了 \n{2,},右下角的 .* 图标没变蓝,它就完全不解析转义序列。
必须先按 Ctrl+H(Windows/Linux)或 Cmd+Option+F(macOS),再点右下角 .* 按钮激活正则(变蓝才算生效)。验证方式:在查找框输 \d+,能高亮数字就说明正则已就位。
另外注意:\n 在查找中只匹配 LF(Unix/Linux/macOS 换行),对 Windows 的 \r\n 会漏掉 \r。更稳写法是用 Sublime 内置的 \R(仅限查找阶段),它自动适配所有换行格式。
替换框里怎么插入真实换行符
不能输 \n,也不能敲回车——替换框不解析任何转义序列,\n 就是字面的 \ 和 n,尤其在 JSON 或 JS 字符串里会直接导致语法错误。
正确做法是用快捷键插入真实换行符:
- Windows/Linux:
Ctrl+Shift+Enter - macOS:
Control+Command+Enter
想插两个换行?连按两次快捷键,不是输 \n\n。如果快捷键失效,优先检查是否被输入法或系统快捷键拦截(macOS 上 Command 键冲突很常见)。
^ 和 $ 加换行总出错,问题在哪
大概率是勾选了 . matches newline(那个 ↩ 图标)。一旦启用,^ 和 $ 就不再按“每行首尾”匹配,而是变成全文首尾,.*? 会跨行吞掉整段结构,加出来的换行全乱套。
所有涉及 ^、$、^(\s*) 的操作,务必确认 ↩ 图标未激活。
常见需求对应写法:
- 给每行末尾加换行:查
$,替为快捷键插入的换行符 - 给每行开头加换行但避开首行空行:先手动选中第二行起的所有行,再操作
- 保留原始缩进:用捕获组,例如
^(\s*)foo→$1bar,否则新内容全顶到左缘
删空行 + 补间隔,为什么不能一条正则搞定
因为 \n 在正则中既是内容又是锚点,混用极易失控。比如搜 ^\s*$\n 替成 \n,结果要么漏匹配,要么把缩进吃掉,甚至把 if (x) { 后面的换行也干掉。
必须分两步:
- 先删空行:查
^\s*$\R,替为空(注意用\R,不是\n) - 再加间隔:查
$,替为快捷键插入的换行符
清理末尾多余换行:查 \R$,替为空,确保文件以单个换行结尾——否则 Git 会报 “no newline at end of file”。这个细节在批量处理配置文件或模板时特别容易被忽略。


















