明明记得项目里写过这个函数名,Ctrl+Shift+F 搜出来零结果,切到文件里手动翻又在。
先别怀疑索引坏了,VS Code 的全局搜索有几处默认设置会挡路。
排除规则先看一遍
默认排除 .git 和 node_modules,项目里如果有 search.exclude,或者 .gitignore 里写了日志目录,搜索还会跟着忽略。设置里搜 useIgnoreFiles,关掉它再试一次。
要搜 node_modules 里的源码,在搜索框下方的「要排除的文件」里删掉规则,或者写成感叹号加路径来覆盖。
三个开关的状态
搜索框右边有 Aa、ab、.* 三个按钮,分别对应大小写、全词、正则。上一次搜正则忘了关,这次搜普通字符串就会漏。
正则模式里括号和点都是元字符,搜 getData() 得转义,不如先关掉正则再搜。
只搜指定目录
资源管理器里右键某个文件夹,选「在文件夹中查找」,范围就锁在那。或者在「要包含的文件」里写 src 加双星号加扩展名。
多根工作区要注意,搜索默认覆盖所有根目录,只想搜一个就在包含框里限定路径,结果少很多也快很多。
搜不到时的排查顺序
先看结果面板有没有提示「未找到结果,但仍有一些文件被排除」,有的话点开看被谁排除的。再看文件是不是没保存,未保存的修改不进搜索索引。
二进制文件和编码也有影响。UTF-16 保存的文件默认不被当文本搜,中文注释如果显示乱码,先确认文件编码是 UTF-8。
超大仓库搜索慢,装 ripgrep 也没用,VS Code 自带的就是它。限制包含范围比调参有效。
最后补一句,Ctrl+Shift+F 之后按上箭头能翻出这次会话搜过的词,比重新敲一遍快。
搜索还有个隐藏行为:默认只搜工作区里的文件,单文件模式打开的临时文件不在范围内。想搜整个目录,得先把文件夹添加到工作区。
结果面板里的替换功能要慎用,正则替换写错一个捕获组,几十个文件同时被改,撤销起来很麻烦。