ctrl+shift+f 没反应或只搜当前文件,实为搜索面板卡在「当前文件」模式(右上角显示文档图标),按两次快捷键或点击⋯→勾选「在文件中查找」即可恢复全局搜索。

Ctrl+Shift+F 没反应或只搜当前文件?先看搜索面板状态
VSCode 的 Ctrl+Shift+F 默认启动全局搜索,但常因状态残留卡在「当前文件」模式——右上角显示灰色文档图标,而非文件夹图标。这不是快捷键失效,而是面板没切对上下文。
解决方式非常直接:
- 再按一次
Ctrl+Shift+F,强制重置为全局模式 - 或点击搜索面板右上角 ⋯ → 勾选「在文件中查找」(注意不是「在文件中替换」)
- Mac 用户若用
Cmd+Alt+F没反应,大概率被系统快捷键拦截,改用Cmd+Shift+F或在「系统设置 > 键盘 > 快捷键」里关闭冲突项
files to exclude 输入框比 search.exclude 更优先,且支持临时覆盖
search.exclude 是 JSON 配置项,写在 settings.json 里,用于长期排除目录(如 "**/node_modules": true)。但它会被搜索面板右上角「files to exclude」输入框里的规则完全覆盖——后者是临时、会话级的,关掉面板即失效。
常见误操作:
- 在
settings.json中写了"dist": true→ 无效,必须用"**/dist/**": true - 在「files to exclude」里填
dist→ 只排除根目录下的 dist,子目录如packages/foo/dist仍被扫描 - 多个规则用英文逗号分隔,但否定规则(
!开头)必须放在后面,否则前面的正向匹配会提前终止判断
推荐调试方式:临时在「files to exclude」填 **/src/test/**,**/e2e/**,确认结果收敛后再固化到 search.exclude。
全局搜索不认 files.exclude,只认 search.exclude 和 .gitignore
很多人把 files.exclude(控制侧边栏显示)和 search.exclude(控制搜索范围)混为一谈。前者对全局搜索完全无影响——哪怕你在资源管理器里看不见 node_modules,只要没配 search.exclude,它照样被 ripgrep 扫描。
真正生效的排除链是:
- 先读
.gitignore(默认开启,由search.useIgnoreFiles控制) - 再叠加
search.exclude配置 - 最后被「files to exclude」输入框内容覆盖
所以如果你搜不到某文件,先检查:ripgrep 是否把它当作了已忽略文件——打开开发者工具(Ctrl+Shift+I),Console 里搜 rg 或 ignored,能看到实际被跳过的路径列表。
正则搜索必须用 Ctrl+Shift+F + .* 开关,符号查找器(Ctrl+T)不支持
Ctrl+T 是符号查找器,只做模糊匹配,输入 ^use[A-Z] 或 useState|useEffect 不会触发正则解析,^、| 全部当作普通字符处理。
真要用正则,唯一路径是:
- 打开
Ctrl+Shift+F - 点开右侧
.*图标启用正则模式 - 注意:正则中的换行符
\n默认不匹配,需确保搜索内容本身含真实换行(或用[\s\S]*替代.*) - 捕获组替换用
$1,不是\1;大小写敏感开关(Aa)和全词匹配(ab)是独立开关,别指望正则自动接管
最易忽略的一点:正则模式下,空格、缩进、换行都成为可匹配字符,而 UI 不会高亮这些不可见字符——写错一个 \s 少了量词,整条规则就静默失效。











