Ctrl+Shift+F(Windows/Linux)或Cmd+Shift+F(macOS)是唯一全局搜索入口,Ctrl+F仅限当前文件;需确认面板显示“在文件中查找”、关闭Match Case/Whole Word/Regex误启、限定范围用src/*/.ts等语法,并替换时用$1而非\1。

Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)是唯一有效的全局搜索入口,不是 Ctrl+F —— 后者只在当前文件内生效,很多人输完词按回车没反应,就是卡在这一步。
为什么按 Ctrl+F 没搜到项目里的内容?
因为 Ctrl+F 默认只作用于当前打开的文件,和工作区无关。它右上角会显示“在当前文件中查找”,状态栏路径也只显示单个文件名。真正扫整个工作区的,必须用 Ctrl+Shift+F(或点击左侧活动栏的放大镜图标)。首次调出面板时若看到左上角灰色小字写着“在当前文件中查找”,说明你根本没进全局模式。
搜索没结果?先检查这三个开关
VSCode 全局搜索默认关闭高级匹配,但一旦误点开就容易静默失败:
-
Match Case(Aa 图标):开了之后搜user就匹配不到User或USER -
Match Whole Word(ab 图标):开了之后搜data就跳过database,适合变量名精确定位 -
Use Regular Expression(.* 图标):开了但输入了中文括号(、全角空格或非法语法,VSCode 不报错也不返回结果,直接“查无此词”
日常建议:三个图标都保持未高亮状态;只有真要写 function\s+\w+ 或提取 class="([^"]+)" 这类结构时,才开 .*。
怎么限定只搜 src 目录下的 .ts 文件?
在搜索面板第二行“files to include”输入框里填:src/**/*.ts。多个条件用逗号分隔,比如:src/**/*.{ts,tsx},!src/test/** 表示搜所有 ts/tsx 但排除 test 子目录。注意:!node_modules/** 这类排除规则默认已启用(受 Search: Use Ignore Files 控制),但如果发现 .gitignore 里忽略的文件意外出现在结果中,就去设置里关掉这个选项。
替换时捕获组写 $1 还是 \1?换行怎么输?
VSCode 替换引擎基于 JavaScript 正则,捕获组引用统一用 $1、$2,写成 \1 不生效,界面也不会提示错误。需要换行时,不能直接按 Enter(那会执行搜索),得按 Shift+Enter。另外,“全部替换”按钮有风险:如果正则里漏写了 ^ 或 $ 边界符,可能跨行误替;建议先点开几条结果确认上下文再批量操作。
最常被忽略的一点:搜索面板底部状态栏显示的路径,必须是你预期的工作区根目录。如果开了多个文件夹,VSCode 默认只搜当前“焦点工作区”,不是所有已打开的文件夹——右键对应文件夹选“Find in Folder”反而更稳。


















