Ctrl+Shift+F(或Cmd+Shift+F)是唯一支持多文件夹查找替换的入口;需显式填写路径如./src/,./tests/,开启.*模式并用$1引用捕获组;替换后须手动保存且建议先提交Git。

Ctrl+Shift+F 是唯一入口,不是 Ctrl+H 或右键菜单
很多人按 Ctrl+H 输完内容点 Replace All,结果只改了当前文件——它压根不跨文件。右键菜单里的“在文件中查找”也常不可靠,尤其没加载项目时会失效。必须用 Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)调出「Find in Files」面板,这是唯一真正支持多文件夹操作的路径。
Where 字段填什么才覆盖多个文件夹?别留空、别填 ./
留空 ≠ 所有文件夹,它等价于“只搜当前已打开的标签页”;填 ./ 可能被解析为当前工作目录(含隐藏文件),且 Windows/macOS 行为不一致。真正可控的方式是显式列出多个路径,用逗号分隔:
-
./src/, ./tests/, ./shared/—— 精准限定三个文件夹 -
., -node_modules/, -dist/, -build/—— 先扫整个项目,再排除构建目录(注意统一用正斜杠/) -
**/*.ts, **/*.js—— 配合项目根目录使用,双星号递归匹配所有子目录下的指定类型文件
路径区分大小写:./SRC 和 ./src 是两个不同目录;file_exclude_patterns 设置也可能让某些文件被跳过,搜不到不一定是没匹配上。
正则替换必须开 .* 模式,捕获组只能用 $1
没点右下角的 .* 图标(或按 Alt+R),所有 \d、^、$ 都当普通字符处理。开启后还要注意:
- 括号、点号、美元符等元字符必须手动转义,例如
getUser$$([^)]+)$$(才能匹配getUser(id) - 替换字段里用
$1引用捕获组,\1无效 -
.默认不匹配换行符,跨行需加(?s)前缀,如(?s)foo.*bar -
\b对下划线和数字不敏感,\buser_name\b会误中username,更稳的是(?
Replace All 后文件没保存?这不是 Bug,是设计
Sublime 不会自动保存被修改的文件——所有改动都在内存里。关掉未保存的标签页,修改直接丢弃。必须手动执行 Ctrl+K 松开后接 Ctrl+B(即「全部保存」),或者菜单选 File → Save All。
更关键的是:操作前务必 git commit -m "before global replace"。出错时 git checkout . 三秒回滚,比任何撤销都可靠。复杂正则 + 多文件夹组合下,漏掉一个排除项或转义错误,就可能把 src/utils.js 里的路径下划线全干掉——这种问题不会报错,但编译直接失败。











