必须手动删除settings.json中的search.history整行并重启VSCode才生效;该字段明文存储关键词,不删则永久残留于Ctrl+Shift+F下拉列表。

搜索历史关键词怎么删干净
VSCode 的搜索历史不是临时缓存,而是明文写死在 settings.json 里的 search.history 字段。不手动删,它就永远挂在 Ctrl+Shift+F 下拉列表里,哪怕你换项目、清缓存都没用。
操作步骤很直接:
- 按
Ctrl+Shift+P打开命令面板,执行Preferences: Open Settings (JSON) - 搜索
"search.history",找到整行类似"search.history": ["fetch", "useEffect", "api/error"] - 整行删掉(包括引号、中括号、逗号——别只删数组内容)
- 保存文件,**必须重启 VSCode**,否则下拉列表还是旧的
注意:search.history 只存字符串,不记录路径、时间或是否匹配成功。删了它,不影响当前索引或搜索结果准确性。
为什么改了 files.exclude 还搜到不该出现的文件
常见现象是:你明明在 settings.json 里写了 "**/old-folder/**": true,但全局搜索仍列出里面已删或不该扫的文件。问题往往出在通配符写法或作用域上。
关键点:
-
files.exclude控制资源管理器显示,search.exclude才真正跳过搜索扫描——两者要分开配 - 路径末尾斜杠很重要:
"**/old-folder/"和"**/old-folder/**"效果不同;后者才排除子目录,前者可能漏掉 - 如果目标是 Git 删除但未
git rm的文件,运行git ls-files --deleted看它是否还在 Git 索引里;真删干净了还搜得到,大概率是索引没刷新
临时救急可加一条 "search.exclude": {"**/old-folder/**": true},比改 files.exclude 更直接有效。
如何复用带过滤条件的搜索(比如只查 TS 文件里的正则)
每次打开搜索面板再点 … 设 files to include、勾 .*、调大小写,效率太低。VSCode 支持把整套配置存成命名查询,一键加载。
做法是在工作区或用户 settings.json 中加 search.savedQueries:
"search.savedQueries": {
"tsApiCalls": {
"content": "fetch\(|axios\.",
"isRegex": true,
"include": "**/*.ts",
"label": "TS API Calls"
}
}
之后在搜索面板顶部点击“…” → “Load Saved Query”,选 tsApiCalls 就能还原全部条件。注意:include 值要用 glob 语法,正则里的反斜杠要双写(\(),否则解析失败。
这个配置不会自动同步到其他工作区,想跨项目复用,得手动复制进对应 .vscode/settings.json。
search.usePCRE2: false 该不该关
启用 PCRE2 后,VSCode 会复用旧索引快照,好处是搜索快;坏处是 Git 频繁删改后,已物理删除的文件仍可能出现在结果里——这不是 bug,是索引延迟更新。
如果你常遇到“搜出已删文件”,且确认文件确实不在 git status 和 ls 输出里,关掉它最干脆:
- 在
settings.json加"search.usePCRE2": false - **必须重启 VSCode**(热重载不生效)
- 首次搜索会重建索引,等几秒再查,结果才真实
副作用是不能用 (?i)、(?-s) 这类 PCRE2 特有语法,但 ^foo.*bar$、d+ 这些通用正则完全不受影响。对多数人来说,真实性比花式语法更重要。
真正容易被忽略的是:索引重建只发生在首次搜索,之后又会缓存;所以删完文件后,如果没主动触发新搜索,旧结果可能继续残留几小时。











