sublime text跨文件全局查找替换必须用ctrl+shift+f(windows/linux)或cmd+shift+f(macos)打开find_in_files面板,填“.”表示整个项目,启用正则需点.*按钮并用$1引用捕获组,替换后须手动save all。

Sublime Text 跨文档全局查找替换不是 Ctrl+H 点一下 Replace All 就完事的事——它默认只动当前文件,不跨目录、不认正则、不自动保存,直接硬上大概率改错 user_id 变成 user_name,或把 src/utils.js 里的下划线全干掉。
Ctrl+Shift+F 是唯一入口,不是 Ctrl+H 或右键菜单
很多人按 Ctrl+H 输完内容点 Replace All,结果只改了当前标签页;右键选“在文件中查找”也常失效——因为那只是快捷入口,底层没走真正的跨文件通道。真正触发全局扫描的命令只有一个:find_in_files 面板。
- Windows/Linux 必须按
Ctrl+Shift+F,macOS 是Cmd+Shift+F - 按了没反应?先检查
Preferences → Key Bindings – User里有没有插件劫持了这个快捷键 - 菜单路径是
Find → Find in Files,但别依赖它——某些插件会覆盖该菜单项 - 面板打开后右下角状态栏必须显示项目路径(如
~/my-project/),否则说明没加载项目根目录,Where框会灰显或仅限 “Open Files”
Where 字段填什么才真正扫整个项目
Where 不是路径补全框,是 Shell 风格的过滤表达式。留空 ≠ 全项目,它等价于“只搜已打开的标签页”。填错一个字符,就可能漏掉 90% 的文件。
- 整个项目:必须填单个英文点
.(不是./,也不是./src) - 只改业务 JS:写
./src/**/*.js(双星号 ** 才递归子目录) - 排除
node_modules和dist:用逗号分隔 + 减号前缀,如., -node_modules/, -dist/ - 限定多类型:写
./src/**/*.ts, ./tests/**/*.ts,不支持*.+(ts|tsx)这类正则语法 - Linux/macOS 下路径区分大小写:
./SRC和./src是两个目录
正则替换必须用 $1,不能用 \1,且 . 默认不跨行
启用正则后,console\.log$$([^)]*)$$ 能匹配函数调用,但如果你在 Replace 框里写 debugger($1) 却没生效,八成是用了 \1 或忘了开正则模式。
- 先点右下角
.*图标(变蓝才算激活),或按Alt+R切换 - 捕获组引用只能用
$1、$2,\1在 Sublime 里是字面量,不会被解析 -
.默认不匹配换行符——foo.*bar找不到foo\nbar;要跨行得加(?s)前缀:(?s)foo.*bar - 单词边界慎用:
\buser_id\b在 Sublime 里对_不敏感,仍会匹配到username;更稳的是(? - 中文、Unicode 字符无需额外转义,但文件编码必须是 UTF-8(右下角状态栏看)
Replace All 后必须手动 Save All,且不可撤销
点下 Replace All 后所有改动都在内存里,关掉未保存的标签页,修改直接丢弃。Sublime 没有跨文件的撤销历史,也没有自动保存快照机制。
- 替换前务必执行:
git add -A && git commit -m "before global replace",出错时git checkout .三秒回滚 - 替换后必须按
Ctrl+K松开,再按Ctrl+B(即 “全部保存” 快捷键),别信右上角的星号 * - 如果部分文件没生效,先检查是否被
folder_exclude_patterns过滤了(比如node_modules默认被跳过),或文件编码不是 UTF-8 导致读取失败 - 大量匹配时(如上千处),Sublime 可能卡顿甚至假死——建议分目录逐步操作,或临时关闭索引:
"index_files": false加进设置里











