全局替换会扫到 files.exclude 隐藏的文件,因为 files.exclude 仅影响资源管理器和 Ctrl+P,搜索由 search.exclude 独立控制;二者互不感知,需分别配置。

为什么全局替换还会扫到被 files.exclude 隐藏的文件
因为 files.exclude 只控制左侧资源管理器和 Ctrl+P 文件跳转,不影响搜索行为。VSCode 的全局替换(Ctrl+Shift+H)完全由 search.exclude 控制——两者互不感知。你删了 node_modules 在文件树里,不代表它不会出现在替换结果中。
必须手动配 search.exclude 才能真正排除
即使 files.exclude 已写好 "**/node_modules": true,也得在 search.exclude 里重复加一遍。常见遗漏点:
-
"node_modules": true只排除根目录下的node_modules,深层嵌套(如packages/foo/node_modules)必须用"**/node_modules": true - 推荐加
/**后缀:"**/node_modules/**": true,避免匹配到node_modules_backup这类名字相近的目录 - 多个排除项必须各自为独立 key,不能合并成
"**/node_modules/**,**/dist/**": true—— VSCode 会直接忽略整条 - 配置位置优先用工作区级:
.vscode/settings.json,避免污染全局设置
临时排除比改配置更快的场景
不想动配置、又只想跳过某几个目录时,直接在搜索面板的“文件包含”框里输入:
**/*.ts -exclude:tests -exclude:legacy
这种语法支持即时生效,且不保存到 settings.json。注意:
-
-exclude:后面是路径前缀,不是 glob 模式,所以写tests就能排除所有tests/开头的路径 - 不能用
-exclude:**/tests/**,VSCode 不识别带通配符的-exclude - 该方式只对当前搜索有效,关掉面板就失效
替换前最后一道防线:预览别跳过
哪怕 search.exclude 配得再全,CSV/HTML/JSON 里字段边界模糊时仍可能误替。关键动作:
- 启用正则模式(点
.*图标),用(?:^|,)(\"?)(N/A)(\"?)(?:,|$)这类带边界的表达式,而不是裸搜N/A - 务必逐条点开预览,确认每行替换后结构没崩(比如引号是否配对、逗号是否错位)
- 如果某行预览显示
"0"而原先是N/A,说明捕获组 $1/$3 生效了;如果显示0但原先是"N/A",说明正则没捕获引号,得调
真正容易被忽略的是:search.exclude 和 files.exclude 是两套独立系统,配错一个,另一个照常干活。别指望隐藏了就等于跳过了。


















