Ctrl+Shift+F灰显因未进入项目模式,需通过File→Open Folder加载目录并确认状态栏显示路径;Where框填“.”搜全项目,“src/”搜子目录,“./src/*/.ts,-node_modules/,-dist/”限定类型;正则替换用$1而非\1,跨行需(?s)前缀。

Ctrl+Shift+F 灰显或打不开,先确认是否真进了项目模式
Sublime Text 的跨目录搜索根本不会启动,除非你用 File → Open Folder… 显式加载了文件夹——它不认单个文件,只认目录。左下角状态栏必须显示类似 ~/my-project/ 的路径,侧边栏出现完整树形结构才算生效。如果只是双击打开一个 index.html 或用 Add Folder to Project 拼凑路径,Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)永远是灰色的。
Mac 用户额外注意:Cmd+Shift+F 默认被系统 Spotlight 占用,需在「系统设置 → 键盘 → 快捷键 → Spotlight」里关掉;Windows/Linux 用户若快捷键失效,去 Preferences → Key Bindings – User 搜 "ctrl+shift+f",删掉插件冲突项。
Where 框填什么才真正扫到目标文件
Where 不是路径补全框,也不是 shell 命令行,它是 Sublime 自定义的路径过滤表达式。填错一个字符,就等于搜了别的地方。
- 搜整个项目:必须填
.(单个英文点),不是./、./src或留空 - 只搜
src/及其子目录:填src/(前缀匹配,自动递归) - 限定类型并排除干扰:写成
./src/**/*.ts, -node_modules/, -dist/(逗号分隔,斜杠统一用/,Windows 也一样) - 只搜已打开的标签页(含未保存的
untitled):手动填open_files,但前提是状态栏已显示项目路径,否则它只搜当前那个文件
正则替换总出错?盯住 $1、(?s) 和点号行为
Sublime 的正则引擎基于 PCRE,但替换语法是自研的:\1 是字面量,根本不会解析为捕获组;. 默认不匹配换行符,哪怕开了 .* 按钮也没用。
- 捕获组引用必须用
$1、$2,例如把getUser(id)改成getUser({ id }),查找填getUser$$([^)]+)$$,替换填getUser({ $1 }) - 跨行匹配必须加
(?s)前缀,比如(?s)foo.*bar才能匹配foo\nbar - 想精准匹配单词边界,
\buser_id\b对下划线不敏感,仍会命中username;更稳的是(? - 启用正则后,
.、+、(、)都要转义,比如搜console.log()得写console\.log$$[^)]*$$
Replace All in Files 后内容“消失”,不是 Bug 是设计
Sublime 的全局替换把修改存在内存里,不触发文件修改标记,也不弹保存提示。关掉窗口,所有改动立即丢弃,且无撤销历史。
- 替换完成后,必须手动执行
File → Save All,或快捷键:Ctrl+K松开 → 再按Ctrl+B(macOS 是Cmd+K→Cmd+B) -
Ctrl+S只保存当前激活文件,对其他已改未存的文件完全无效 - 高风险操作前务必
git commit或git stash,替换完用git diff确认范围再决定是否提交
最常被忽略的点是:Where 表达式和实际路径结构强绑定,而 Sublime 对未保存文件的处理又很特殊——它可能出现在 open_files 结果里,却不会出现在 . 或 src/ 的扫描中。别假设“开了文件夹就等于能搜到一切”,得按模式对齐。


















