Sublime高效查找替换需分场景:单文件用Ctrl+F/H,跨文件必须Ctrl+Shift+F并填“.”;正则需开启.*模式,$1捕获组有效;Replace All前须Git commit且手动保存,Where路径错误或未commit将导致误操作。

Sublime 的查找替换不是“会 Ctrl+F 就行”,真正高效用法取决于你面对的是单文件微调、跨文件重构,还是带逻辑的批量清洗——不同场景下,快捷键、模式开关、路径写法和安全动作全都不一样。
Ctrl+F 和 Ctrl+H 只管当前文件,别指望它们跨标签页
很多人输完关键词按 Ctrl+F,发现只在当前打开的文件里跳转,换到另一个标签页还得重输——这是因为 Ctrl+F 和 Ctrl-H 天然作用域就是当前视图(即当前文件),哪怕你打开了 20 个文件,它们也互不感知。
- 想快速定位当前文件内所有出现位置:按
Ctrl+F输入词,再按F3向下跳,Shift+F3向上跳;Alt+F3直接选中全部匹配项,进入多光标编辑状态 - 想替换单个文件里的内容:用
Ctrl+H,填好Find和Replace,点Replace All——但注意:如果文件被折叠或部分区域被排除(比如代码折叠块),那些地方不会参与替换 - 误以为
Ctrl+F能“记住上次搜索词”?它确实会缓存,但仅限于当前文件;换文件后得重新输,或者用Ctrl+Shift+F面板里的历史下拉箭头复用
跨文件查找替换必须用 Ctrl+Shift+F,Where 填 “.” 才真搜整个项目
Ctrl+Shift+F(macOS 是 Cmd+Shift+F)是唯一能触发全局搜索的快捷键,Ctrl+F 或右键菜单里的“在文件中查找”都是假入口,点了没反应或只搜已打开文件。
- 面板弹出后,
Where输入框必须填.(一个英文点),才代表从当前项目根目录递归搜索;留空 = 只搜当前已打开的文件,不是“全部文件” - 要排除
node_modules和dist:写成., -node_modules/, -dist/(注意斜杠统一用/,Windows 上也一样) - 只改 TypeScript 文件?写
./src/**/*.ts, ./tests/**/*.ts,双星号**表示递归子目录,逗号分隔多个 pattern - 快捷键冲突导致
Ctrl+Shift+F失效?进Preferences → Key Bindings – User搜索ctrl+shift+f,删掉插件自定义的绑定项
正则替换最容易栽在 . 不跨行、$1 写错、没开 Regex 模式
Sublime 的正则引擎是 PCRE 风格,但替换语法是自研的:$1 有效,\1 无效;. 默认不匹配换行符,.* 永远卡在单行内。
- 开启正则必须点面板左下角的
.*按钮(或按Alt+R),否则(\w+)、$1全当字面量处理 - 想跨行匹配?在正则开头加
(?s),例如(?s)function.*?{,否则function和{分两行就找不到 - 捕获组编号从 1 开始:
(\d+)-(\d+)对应$1和$2,$0是整个匹配字符串 - 替换前务必点
Find All,看右下角显示命中数是否合理;上千条匹配先暂停,检查是不是.*写太宽泛,或者路径没限制导致扫了node_modules
Replace All 不保存、不可撤销,Git commit 是硬性前置动作
点下 Replace All 后所有改动都在内存里,关掉未保存的标签页就永久丢失;Sublime 没有跨文件的撤销栈,也没自动保存机制。
- 操作前必须执行:
git add -A && git commit -m "before global replace";出错时git checkout .三秒回滚 - 替换完成后,不能只靠标签页右上角的星号
*判断是否已保存——必须手动按Ctrl+K松开,再按Ctrl+B(即“全部保存”),否则修改只存在内存中 - 部分文件没保存成功?检查右下角状态栏是否显示
RO(只读),或文件被其他进程占用(比如 webpack 正在监听写入) - 中文乱码?右下角编码显示不是
UTF-8,先用File → Reopen with Encoding → UTF-8转码再操作
最常被忽略的其实是 Where 字段语义和 Replace All 的无状态性:它不关心你有没有 commit,也不校验路径合法性,输错一个字符就可能漏掉整个 src 目录,或误改 package-lock.json。动手前花十秒确认路径和 Git 状态,比事后修复快得多。

















