sublime中搜索 无反应是因为未启用正则模式,需点击.图标激活;推荐用 跨平台匹配换行,删空行应搜^s$ ,多行替换须捕获缩进并预览。

为什么直接搜
没反应
不是
写错了,是正则模式根本没开。Sublime 默认把
当普通字符处理,哪怕你写了
{2,} 也搜不到任何换行——因为 .* 按钮没点,引擎压根不解析转义序列。
必须先按 Ctrl+H(Windows/Linux)或 Cmd+H(macOS),再手动点击右下角的 .* 图标(变蓝才算生效)。否则所有
、 、^、$ 全部失效。
- 确认方式:输入
d+点“查找”,能高亮数字就说明正则已激活 - 常见误操作:以为按了
Ctrl+H就自动进正则,结果搜时连一个换行都不匹配 - Windows 文件用
,但直接写容易漏掉单个;更稳写法是用R(Sublime 内置通用换行符)
R 和
到底该用哪个
R 是 Sublime 特有的跨平台换行符匹配,等价于
|
|
,不用管文件是 Windows、macOS 还是 Linux 换行格式。而
只匹配 LF,在 Windows 文件里会漏掉
中的
,导致替换不完整。
例如想把所有换行替换成空格合并成一行:
- ✅ 推荐:
R→(一个空格) - ❌ 风险:
→,在 Windows 文件中只处理了 LF,会残留成乱码 - ⚠️ 注意:
R不支持放在字符类里,比如[R]是非法语法
怎么删空行又不破坏末尾换行
直接搜 ^s*$ 并替换为空,看似干净,实则常把文件末尾的换行符也干掉,导致 Git 提示 “no newline at end of file”。更糟的是,如果开了 . matches newline,^ 和 $ 会失效,整条规则崩盘。
- ✅ 正确做法:关闭
. matches newline(即不勾选 ↩ 图标),搜^s*$R,替换为空 - ✅ 补一刀清理末尾多余换行:搜
R$,替换为空(确保文件以单个换行结尾) - ❌ 错误示范:
^s*$+ 勾选 ↩ → 匹配失控,可能吞掉代码行首的空格甚至整段逻辑
跨行内容替换时缩进错乱怎么办
比如要把 function foo() {
console.log(1);
} 替成 const foo = () => {
console.log(1);
};,直接用 function (w+)() { 替换,新文本会丢失原始缩进,所有代码被顶到行首。
关键不是正则写得不够狠,而是没把缩进本身捕获进来:
- ✅ 捕获缩进:
^(\s*)function (\w+)\(\) \{(注意\s*前的^和括号) - ✅ 替换保留:
$1const $2 = () => { - ⚠️ 注意:
^和$默认只匹配全文首尾,必须加(?m)或勾选 ↩ 才能按行生效;但这里用^是为了捕获每行开头的空白,所以勾选 ↩ 是必要的 - ? 复杂结构别硬刚:含嵌套
{}或换行注释时,[sS]*?比.*?更可靠,且必须加?防贪婪越界
最常被忽略的一点:替换前不点 Find All 预览,就敢按 Replace All。尤其涉及 R 或多行捕获时,一个没注意的 ? 缺失,可能让整个文件的换行和缩进全乱套,而且很难靠 Ctrl+Z 撤回——因为 Sublime 在大文件中会分块执行替换,撤销栈可能只记录部分操作。











