全局搜索生效需同时满足项目已加载、where路径正确、正则开关开启;ctrl+shift+f灰显主因是未进入项目模式;where填“.”搜全项目,“src/”搜src下所有文件,“open_files”搜已开标签页;正则替换需两处.*图标均变蓝,$1才生效。

全局搜索在大型项目里不是“输完回车就出结果”,它必须满足三项硬条件:项目已加载、Where路径写对、正则开关点开;缺一不可,否则 Ctrl+Shift+F 灰显、搜不到、改不掉——这不是 Bug,是设计逻辑。
Ctrl+Shift+F 为什么灰显或无反应?
根本原因几乎全是项目未进入「项目模式」。单文件打开、拖文件进窗口、甚至用 Add Folder to Project 添加路径,都不等于项目已加载。
- 看左下角状态栏:必须显示类似
~/my-project/的路径,没有 → 还没进项目模式 - 看侧边栏:必须有完整树形目录结构,只有标签页列表 ≠ 项目已加载
- 正确做法:关掉所有标签页,用
File → Open Folder…选中含package.json、src/或go.mod的根目录,等右下角Indexing…消失再操作 - Mac 用户注意:
Cmd+Shift+F常被系统 Spotlight 占用,需在「系统设置 → 键盘 → 快捷键 → Spotlight」里禁用
Where 输入框填什么才真正生效?
这个框不是 shell,也不是正则,它是路径前缀匹配器。填错一个字符,搜的就是错的地方,且排除规则(如 folder_exclude_patterns)会静默生效,优先级高于 Where。
- 搜整个项目:填
.(单个英文点),不是./,也不是留空 - 只搜
src/下所有文件(含子目录):填src/,自动递归,不用写src/**/* - 限定类型 + 排除干扰:填
src/**/*.js, -node_modules/, -dist/(逗号分隔,-开头表示排除) - 只搜已打开但未保存的标签页:必须手动填
open_files,这是唯一可靠方式 - 别写
/src/或./src/——Windows 下斜杠异常,/开头会被当字面量处理
正则替换为什么 $1 不生效?
查找和替换面板的正则开关是独立的,.* 图标必须为蓝色才真正启用;否则 $1 就是字面字符串,括号、点号也不会被转义。
- 查找框里写
console\.log\(.*?\),但.*图标没点蓝 → 只当普通字符串匹配,找不到任何console.log() - 替换框里写
$1,但替换面板的.*图标是灰色 → 输出原样$1,不是捕获内容 - 跨行匹配必须加
(?s)前缀,例如(?s)"content": "(.*?)";否则foo.*bar永远找不到foo\nbar - 删空行别用
^\s*$——\s在 Sublime 里会匹配换行符,可能破坏文件末尾结构;改用^[ \t]*$
Replace All in Files 改完就丢?
所有替换结果都存在内存里,不触发修改标记,也不自动保存。这不是 Bug,是设计。
- 替换后标签页右上角不会变星号,
Ctrl+S只保存当前激活文件,对其他已改未存的文件完全无效 - 必须手动执行
File → Save All,或快捷键:Ctrl+K松开 → 再按Ctrl+B(macOS 是Cmd+K→Cmd+B) - 执行前务必点
Find All看预览列表——如果第一行就显示node_modules/axios/index.js,立刻停手
真正麻烦的从来不是正则怎么写,而是你有没有三秒时间看一眼 .* 图标颜色、扫一遍 Where 路径、点一下 Find All 预览——这三步跳过,后面 Git revert 的时间够重写两遍逻辑。











