sublime text中批量插入换行符应匹配行尾$后替换为\n\n,而非行首^;需关闭“. matches newline”,末尾多余换行用\r$删除。

Sublime Text 里用正则“批量插入换行符”,本质不是真往中间塞
,而是利用 ^ 或 $ 匹配位置,再在替换中显式写入
——否则容易把多行吞成一行或破坏结构。
为什么直接搜 ^ 替换成
会出事
因为 ^ 匹配的是“行首位置”,不是字符;替换成
后,相当于在每行开头插入一个换行,结果是:原第一行前多一个空行,第二行前也多一个……整份文本顶部堆满空行,末尾还可能多出冗余换行。
- 真正想“在每行之间加空行”,该匹配行尾:
$,再替换成 - 若只想给特定行(比如以
function开头的)后加空行,得捕获整行:^(functions+w+s*{),替换为$1 - 务必关闭
. matches newline(即不勾选 ↩ 图标),否则^和$会跨行失效,还可能被当普通字符忽略
在替换框里到底代表什么
它不是“操作系统换行符”,而是 Sublime 当前文件的 line_ending 设置所决定的换行格式。当前文件是 CRLF,
就写入
;是 LF,就写入
。不会自动跨平台转换。
- 想确保插入的是通用换行,用
R更稳——它等价于| |,且只在查找中有效;替换框里不支持R,只能用 - 不要在替换框里写
\n(双反斜杠),那是字面量两个字符,不是换行符 - 如果替换后看到文字里出现字面的
,说明正则模式根本没开,或者你忘了勾选右下角的.*图标
怎么安全地在代码块前后各加一个空行
例如给每个 if 块上下加空行,但不能影响单行 if (x) do(); 或嵌套结构。硬写 if.*{ 容易贪婪越界,得靠锚点 + 非贪婪 + 行边界。
- 先关掉
. matches newline,避免跨行误匹配 - 搜:
^(s*)ifs*(.*?)s*{(注意.*?防贪婪,^和s*捕获缩进) - 替换:
$1if $2不可行——因为你没捕获括号内内容;正确应为:$1if $2) {$3,前提是查找里写了三个捕获组 - 更实用的做法:分两步——先用
^(s*)ifs*(.*?)s*{替换为$1if $2) {$3(只加前面空行),再用^s*}替换为$0(在}行前加空行)
插入换行后末尾多了一个空行怎么办
这是最常被忽略的副作用:批量在 $ 后插
,最后一行末尾也会被插一个,导致文件以两个换行结尾,Git 提示 “no newline at end of file” 变成 “trailing whitespace”。
补救只需一步:搜 R$(注意 $ 在末尾),替换为空。它精准匹配“文件末尾的那个换行符”,删掉多余的那一个,保留合法的行尾换行。
别用
$ ——在 Windows 文件里可能只匹配到
而漏掉前面的
,R 才是跨平台安全写法。











