VS Code全局替换需用多根工作区并正确配置glob路径。Ctrl+Shift+H的“包含文件”不支持逗号分隔,应使用{src,lib}/*/.ts(1.85+)或分两次替换,且须确认索引完成、路径无权限/排除问题。

VSCode 全局替换如何指定多个目录
不能靠“多开几个文件夹”或拖入多个根目录就自动跨目录替换——VS Code 的替换范围严格绑定于当前工作区结构和搜索时的路径过滤规则。真正生效的多目录替换,必须满足两个前提:一是使用真正的多根工作区,二是显式在“包含文件”中写对 glob 路径。
为什么 Ctrl+Shift+H 里填 src/** 和 lib/** 没用
在“在文件中替换”面板(Ctrl+Shift+H)的“包含文件”框里直接写 src/**,lib/** 或 src/**;lib/** 是无效语法,VS Code 会静默忽略后半部分,只按第一个路径匹配。它不支持逗号/分号分隔的多路径写法。
-
src/**✅ 匹配 src 下所有子目录中的文件 -
lib/**✅ 单独写也有效,但和前一个不共存 -
src/**,lib/**❌ 不识别,等价于只用了src/** -
{src,lib}/**❌ VS Code 的 glob 不支持这种 brace expansion(bash 风格),会报“无匹配”
正确做法:用多根工作区 + 精确 include 规则
若你确实需要同时操作 src/ 和 packages/utils/ 两个物理上分离的目录,唯一可靠路径是创建多根工作区,并在替换时用通配符覆盖二者共同父级,或分别执行两次替换。
- 先确保窗口右下角显示 Workspace(不是 Folder),且状态栏有多个文件夹图标 → 这说明是真·多根工作区
- 检查
.code-workspace文件中folders字段是否包含多个path,例如:{"folders": [{"path": "src"}, {"path": "packages/utils"}]} - 打开
Ctrl+Shift+H,在“包含文件”中填**/*.ts→ 此时 VS Code 会搜索所有已加载根目录下的.ts文件 - 如果只想限定其中一部分,比如只动
src/和packages/utils/下的 CSS,则填{src,packages/utils}/**/*.css—— 注意:这个写法仅在 VS Code 1.85+ 版本中被支持,旧版本仍会失败 - 更兼容的做法是分两次:
src/**/*.css替换完,再切到packages/utils/**/*.css
容易被忽略的权限与索引陷阱
即使路径写对了,也可能“搜得到但换不了”。常见静默失败点:
- 某根目录刚加入工作区,右下角还显示 Indexing… → 此时搜索结果不全,替换也不会触达未索引文件
- 目标文件路径含中文或空格,而 VS Code 启动时没用终端命令行方式(如
code .),可能导致该目录完全不被扫描 - 文件系统权限不足(如某些
/usr/local/lib下的文件),VS Code 会跳过修改,但不报错、不提示 -
search.exclude中有模糊规则,例如"**/utils/**": true,会误杀packages/utils/—— 应改用"packages/utils/**": true显式排除
最稳妥的节奏是:先 Ctrl+Shift+F 确认能搜出目标文件,再开 Ctrl+Shift+H 做替换;每次替换前点右上角 ⋯ → Preview Replace,亲眼看到列表里有你要改的那些路径。


















