ctrl+shift+f(windows/linux)或cmd+shift+f(macos)是sublime text全局查找替换的唯一入口;必须先通过open folder打开项目根目录,where字段填“.”才表示整个项目,误设会导致误替换;正则替换需注意pcre语法与$1引用格式;replace all不可撤销,务必提前git commit并手动保存。

Ctrl+Shift+F 是唯一需要记住的全局入口
Sublime Text 没有“项目搜索”按钮,也没有“一键全搜”开关——它的全局查找替换功能全部收束在 Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)这一个快捷键里。很多人卡在第一步:按了 Ctrl+F 或 Ctrl+H 死活搜不到跨文件内容,是因为那俩只作用于当前标签页。
- 必须先通过
File → Open Folder…打开项目根目录,左下角状态栏出现路径(如~/my-project/)才算进入“项目模式”;否则Ctrl+Shift+F面板里的Where字段会灰显或仅显示“Open Files” -
Where留空 ≠ 搜整个项目,它实际等价于“只搜当前已打开的文件标签”,不是你想要的结果 - 真正表示“整个项目”的写法是
.(单个英文点),这是相对路径语法,代表当前打开的文件夹及其所有子目录
Where 字段决定你改的是谁,不是靠运气
90% 的误替换事故,不是正则写错了,而是 Where 没锁死范围。比如把 node_modules 里的 lodash 也一起替了,第二天 npm start 直接报 TypeError: _.map is not a function。
- 安全写法示例:
./src/**/*.ts, ./tests/**/*.ts—— 明确限定业务代码和测试,逗号分隔多类型 - 排除干扰目录:
., -node_modules/, -dist/, -build/, -*.min.js—— 注意斜杠方向统一用/,即使在 Windows 上 - 别信“整个项目很干净”,
git status干净 ≠ 没有临时生成文件;file_exclude_patterns设置可能让.log或.tmp文件被跳过,查不到不一定是没匹配,可能是被过滤了
正则替换要小心引用语法和转义细节
Sublime 的正则引擎用的是 PCRE 风格,但替换语法是自己的:捕获组用 、,不是 ;点号 . 默认不匹配换行,想跨行得加 (?s) 前缀。
- 函数调用重构示例:把
getUser(id)改成getUser({ id })
查找:getUser(([^)]+))(注意括号要转义)
替换:getUser({ $1 }) - 删掉所有独立的
console.log语句(不碰字符串里或注释里的):
查找:^s*console.log([^)]*);s*$(^和$锁定整行,.转义点号)
替换:留空,或填// $0转为注释 - 双引号变单引号:
"([^"]*)"→'$1';但若字符串含转义引号(如"He said "hi""),这个正则就失效了,得升级为"((?:[^"\]|\.)*)",建议先小范围试
Replace All 不可撤销,靠 Git 而不是 Ctrl+Z
点下 Replace All 的那一刻,所有匹配文件的内容就被直接写入磁盘——没有“确认弹窗”,没有“操作历史”,Ctrl+Z 只对当前激活的文件标签有效,且一旦你切走标签,撤销栈就清空了。
- 务必在操作前执行:
git status确保工作区干净;如果已有未提交变更,先git stash或git add -A && git commit -m "before global replace" - 替换完别急着关面板,先按
Ctrl+K松开,再按Ctrl+B(即File → Save All),否则改动只是内存脏数据,关掉 Sublime 就丢了 - 大项目慎用
Replace All:优先用Replace按钮逐个点,配合F3跳转,节奏可控;或者导出 Find in Files 结果(右键结果列表 →Save as),留档比对
最危险的不是功能不会用,是觉得“就几个字符串而已”,跳过 Where 校验、跳过 Find 预览、跳过 git commit,最后在 CI 流水线上看到 ReferenceError: oldVar is not defined 才意识到改错了三十七个地方。










