“包含文件”须用相对工作区根目录的glob语法,如/.css、src//.ts;search.exclude会静默拦截匹配项;替换前需确认文件非只读、未超search.maxFileSize限制且预览展开全部结果。

“包含文件”框填什么才真正生效
填错格式等于没限——src/components不匹配子目录,css不匹配任何文件,.vue只匹配当前层同名文件(如项目根目录下真有个叫.vue的文件)。必须用 glob 语法,且路径需相对工作区根目录。
-
*.css:安全,匹配所有层级 CSS 文件 -
**/*.vue:比*.vue可靠,显式递归 -
src/**/*.ts:只扫src下 TS,跳过node_modules/@types和tests/ -
{src,pages}/**/*.html:多目录白名单,注意无空格、不嵌套 - 留空 ≠ 不限制:会受
search.exclude静默拦截(比如默认跳过node_modules)
为什么开了Match Whole Word还替错了
根本不是正则不够强,而是三个基础开关没配齐。VS Code 默认做的是宽松子串匹配,user会命中username、superuser、USER_ID,甚至 JSON 的"name"字段。
- 不开
Match Case:大小写混搜,Log和log全中招 - 不开
Match Whole Word:id会改掉user_id和identity - 不开
Use Regular Expression:连^行首或\b单词边界都用不了,debug会在debugger里被切一刀
如何绕过search.exclude的静默拦截
哪怕你在“包含文件”里写了**/node_modules/**/*.d.ts,只要search.exclude里有"**/node_modules": true,VS Code 就直接跳过——这不是 bug,是设计上的安全防护。
- 检查方式:
Ctrl+Shift+P→Preferences: Open Workspace Settings (JSON)→ 看是否有search.exclude条目 - 临时绕过:搜索面板右上角点⋯ → 取消勾选「使用排除设置」(仅本次生效)
- 永久修改:在
.vscode/settings.json里删或注释掉对应规则,改完建议删掉.vscode/.search强制重建索引
替换前必须确认的两个隐藏条件
很多人点了Replace in Files(重叠文档图标)就以为完事了,结果发现只读文件没动、大文件没扫、预览里没显示的行也没改——这些都不是“失败”,而是被静默跳过。
- 只读文件(右下角标
Read-only)会被跳过,需手动解除或提权运行 VS Code -
search.maxFileSize默认 12800 字节(≈12.5KB),bundle.js、大日志、生成 JSON 全被跳过,不报错也不提示 - 预览面板只展开前几百条,其余折叠成「… and N more」——这是 UI 渲染限制,不是结果缺失;要导出全部,点⋯ →
Copy All Results


















