全局替换时跳过.log和.tmp文件,应在搜索面板底部files to exclude输入/.log,/.tmp;该规则仅本次有效,长期配置需写入search.exclude且每行一个键值对。

全局替换时怎么跳过 .log 和 .tmp 这类文件
直接在搜索面板底部的 files to exclude 输入框里填 **/*.log,**/*.tmp,逗号分隔,不加空格。这个规则只对本次替换生效,关掉面板就丢弃,适合临时绕过构建日志或临时文件。
常见错误现象:*.log 或 .log 会被忽略——前者只匹配根目录下文件,后者根本不是合法 glob;**/*.log (末尾带空格)会导致整条规则失效。
-
**/*.log才能匹配任意层级的 .log 文件,**/是必须前缀 - 多个后缀要拆成独立 pattern,不能写成
"**/*.log,**/*.tmp": true放进 settings.json —— 那是对象结构,不是字符串列表 - 如果想长期生效,才写进
.vscode/settings.json的search.exclude里,且每条单独一行
为什么写了 **/*.d.ts 还搜到了声明文件
大概率是没关掉「Use Exclude Settings and Ignore Files」开关。VSCode 默认会读取 search.exclude 和 .gitignore,但如果你在搜索面板右上角勾选了这个选项,它反而会强制启用所有排除规则——包括你可能没意识到的隐式规则(比如 TypeScript 插件自动加的 **/*.d.ts 排除),导致行为反直觉。
更常见的情况是:你改了 search.exclude 但没重载窗口,VSCode 缓存了旧索引,仍把 .d.ts 当作可搜文件。
- 先按
Ctrl+Shift+P运行Developer: Reload Window强制刷新 - 检查是否误开了正则模式,而
.d.ts里的点号.被当成了正则元字符,导致匹配失败 -
files to exclude和search.exclude是两套机制:前者只影响当前搜索,后者是持久配置;别混用同一套规则去调试
files to exclude 和 search.exclude 到底该用哪个
日常替换优先用 files to exclude —— 它在搜索面板底部,输入即生效,不改任何配置文件,也不影响别人或 CI 流程。比如替换成千个 console.log,但不想动 test/ 下的断言,就填 **/test/**,**/*.spec.ts。
search.exclude 是为工作区长期治理准备的,比如团队约定所有项目都跳过 dist/ 和 node_modules/,这时才写进 .vscode/settings.json 并提交。
-
files to exclude支持逗号分隔多个 glob,如**/mocks/**,**/*.log,**/coverage/** -
search.exclude必须是 JSON 对象,每个 key 独立,值固定为true,不能是数组或字符串 - 两者叠加生效:先按
files to include缩小范围,再按files to exclude剔除,最后还受search.exclude全局拦截
替换后文件没保存,是不是漏改了
不是漏改,是 VSCode 默认只改内存。即使你点了 Replace All,结果也只存在于编辑器缓存里,文件系统里还是原样。标题栏出现 ● 圆点只是提示“有未保存修改”,不代表已落盘。
尤其注意:被替换的文件如果之前没打开过,VSCode 不会自动把它加载进编辑器标签页——所以你根本看不到那个 ●,甚至以为没生效。
- 执行替换后,务必手动按
Ctrl+S(全部保存)或逐个文件保存 - 想确认是否真改了,打开 Git 面板看差异,或直接在终端跑
git status - 对关键文件,建议先用
Replace(单个)预览,再决定是否Replace All,避免批量写入错误内容
files to exclude 的 glob 语法和 search.exclude 的路径基准不一致,前者基于工作区根,后者也基于根,但插件或多根工作区可能引入额外层级偏移——最稳的方式永远是先试 **/xxx,再观察预览列表里是否真消失了。


















