Sublime Text“Replace All”分三种场景:当前文件需启用正则(.*高亮)、匹配换行(.\n)并确认匹配数;跨文件替换须用Ctrl+Shift+F并正确填写Where路径;项目级替换需指定目录、排除无关文件,且替换后必须手动Save All。

Sublime Text 里“一次性查找替换所有匹配项”不是点一下 Replace All 就完事——它分三种典型场景,行为完全不同:当前文件内、当前打开的多个文件、整个项目目录。不区分清楚,就容易只改了部分文件,甚至根本没生效。
当前文件内全量替换:Ctrl+H 后别急着点 Replace All
很多人按 Ctrl+H(macOS 是 Cmd+Option+F)打开面板,输完内容直接点 Replace All,结果只替换了屏幕可见区域或折叠代码块里的内容。真正全量替换要确认三件事:
- 右下角 .* 按钮必须高亮(表示正则模式已启用),否则
\b、.、$等都无效 - 如果目标含换行符(比如想删掉
console.log(...)整行),需额外勾选右下角.\n(匹配换行) - 点
Replace All前,先点Find All,看右下角状态栏是否显示“X matches”——数量不对,说明正则写错了或范围被限制
跨文件批量替换:用 Ctrl+Shift+F,但 Where 字段不能留空
Ctrl+Shift+F(macOS 是 Cmd+Shift+F)打开的是“在文件中查找”,但它默认只搜当前已打开的标签页,不是整个项目。常见翻车点就是 Where 框留空,结果只改了 2 个正在编辑的文件,而 src/api/ 下的 17 个文件完全没动。
- 整个项目:填单个英文点
.(不是./,也不是./src) - 只改 JS 文件:填
./src/**/*.js(双星号**才递归子目录) - 排除
node_modules和dist:写成., -node_modules/, -dist/ - Windows 路径也必须用正斜杠
/,C:\project会失效
正则替换中 $1 失效?检查括号是否被转义、捕获是否成功
写 (\w+)\.js 查找,替换填 $1.min.js,结果输出 $1.min.js 字面量——这不是 Bug,是 Sublime 的正则引用规则没对上。
-
$1只在正则模式开启(.* 高亮)且查找表达式中存在未转义的括号时才有效 - 点号
.、括号( )、美元符$在正则中都是元字符,要匹配字面量就得加反斜杠:查getUser$$id$$,不是getUser(id) - 如果原文是
getUser( id )(带空格),getUser$$([^)]+)$$就捕获不到,得改成getUser$$\s*([^)]+)\s*$$ - 跨行捕获必须加
(?s)前缀,例如(?s)才能匹配多行注释
替换完文件没变?因为 Sublime 默认不自动保存
点完 Replace All,所有文件标签页右上角都出现星号 *,但关掉窗口前没手动保存,所有改动就丢了。这不是延迟写入,是明确设计:Sublime 把修改保留在内存,由你决定何时落盘。
- 必须执行
File → Save All或快捷键Ctrl+K后接Ctrl+S(macOS 是Cmd+K→Cmd+S) - 没保存的文件关闭时会弹窗提醒,但批量操作中很容易忽略——建议替换前先
git status,替换后立刻git diff核对 - 大项目慎用全量
Replace All,可先在Where中限定单个子目录,验证逻辑无误再推全











