VSCode搜索历史明文存于settings.json的search.history字段,需手动删除该整行并重启生效;关掉search.usePCRE2可强制重建索引,避免搜出已删文件。

VSCode 的“搜索历史”不是缓存,而是明文存进 settings.json 的 search.history 字段;清不掉它,旧关键词就永远在 Ctrl+Shift+F 下拉列表里蹦出来。
怎么查看和手动删掉搜索历史关键词
VSCode 不提供图形界面管理搜索历史,所有关键词都以数组形式写死在用户设置里。
- 按
Ctrl+Shift+P打开命令面板,输入并执行Preferences: Open Settings (JSON) - 在打开的
settings.json中搜索"search.history" - 找到类似
"search.history": ["fetch", "useEffect", "api/error"]这样的整行,直接删掉(包括引号和中括号) - 保存文件,重启 VSCode —— 下次打开全局搜索框,下拉列表就空了
注意:这个字段只存关键词字符串,不记录路径、时间或是否匹配成功。删了它,不会影响当前工作区索引或文件扫描结果。
为什么关掉 search.usePCRE2 能解决“搜出已删文件”
启用 PCRE2 正则引擎后,VSCode 会复用旧的搜索索引快照,尤其在 Git 仓库频繁删改后,已物理删除的文件仍可能出现在结果里 —— 这不是 bug,是索引延迟失效。
- 在
settings.json中添加或修改:"search.usePCRE2": false - 必须重启 VSCode(热重载不生效)
- 首次搜索时会重建索引,等待几秒后再查,结果才反映真实文件系统状态
副作用:禁用后,(?i)、(? 等 PCRE2 特有语法不可用;但 <code>^foo.*bar$、\d+ 这类基础正则完全不受影响。
搜到“已删文件”?先确认它是不是真被删了
VSCode 搜索不区分“Git 删除”和“物理删除”,只要路径还在可遍历范围内,就可能扫到。
- 运行
git ls-files --deleted:如果目标文件出现在输出里,说明它只是被git rm --cached移出了暂存区,还没从 Git 索引清除 - 检查
files.exclude是否误配,比如写成"**/old-folder/**": true却漏了结尾斜杠,导致排除失效 - 临时加一条
"search.exclude": {"**/old-folder/**": true},强制跳过该路径
真正“彻底删除”的文件,不会出现在 git status 或 ls 输出里,也不会被 search.exclude 漏掉 —— 如果还搜得到,大概率是索引没刷新,而不是文件没删干净。
终极清理:删掉 WorkspaceStorage 里的索引目录
VSCode 把每个工作区的搜索索引存在本地 WorkspaceStorage 文件夹,路径形如:
- macOS:
$HOME/Library/Application Support/Code/WorkspacesStorage/<hash>/workspace.json - Windows:
%APPDATA%\Code\WorkspacesStorage\<hash>\workspace.json
这不是配置文件,而是二进制索引数据。删掉整个 <hash> 目录后,VSCode 下次打开该工作区会重新建索引 —— 效果比关 PCRE2 更彻底,但首次搜索会稍慢。别删错父目录,否则可能丢掉其他工作区的本地历史。
复杂点在于:你得先确定哪个 <hash> 对应当前工作区。最稳的办法是关掉 VSCode,进 WorkspacesStorage 目录,按修改时间排序,删最新那个(通常就是刚用过的),再启动验证。


















