全局替换前必须手动设置 files to include,否则可能误改无关文件;files to exclude 不清空会导致 include 失效;正则替换需同步考虑文件类型与捕获组;替换后需手动保存才能写入磁盘。

全局替换前必须手动设置 files to include
VSCode 默认全局替换会扫描整个工作区所有可读文件,但不会自动识别你只想改 .ts 或 .html。它不会猜——你得明确告诉它范围。不填 files to include,就等于让替换“裸奔”,可能误改 package-lock.json、dist/ 里的产物,甚至 node_modules 下的依赖代码(如果没被排除)。
操作路径:打开搜索面板(Ctrl+Shift+F 或 Cmd+Shift+F)→ 点击右上角 ⋯ → 选「Add pattern」→ 在弹出的 files to include 输入框里填:
-
src/**/*.ts(只搜 src 下所有 .ts 文件) -
*.html, *.htm(逗号分隔,支持多类型) -
**/templates/**/*.{html,js}(带扩展名组合的嵌套路径)
注意:**/utils/**/*.ts 这类嵌套通配符在 VSCode 中不生效;真正起作用的是扁平 glob 模式,比如 src/**/*.{ts,tsx}。
files to exclude 不清空,include 可能失效
VSCode 的过滤逻辑是「先排除,再包含」。哪怕你写了 src/**/*.ts,只要 search.exclude 或面板里的 files to exclude 里有 **/node_modules/** 或 dist,而你的目标文件恰好落在这些路径下,它照样被跳过。
常见翻车点:
- 想替换
dist/index.html,但files to exclude默认含dist→ 结果搜不到 - 用了插件自定义了
search.exclude,却忘了在当前工作区.vscode/settings.json里临时覆盖 - 勾选了「Use Exclude Settings and Ignore Files」→
.gitignore和用户级配置全生效,include形同虚设
安全做法:首次限定类型替换前,先点击 files to exclude 右侧的 ⋯ → 「Clear all」,再单独加你需要的排除项(如 **/test/**),避免默认规则干扰。
正则替换时,文件类型过滤和捕获组要同步考虑
比如你想把 HTML 中所有 class="old" 替成 class="new",但只改 .html 文件,且不能动字符串里的 class="old-thing"。这时候光靠 files to include: *.html 不够,还得配合正则边界:
- 开启
.*(正则模式)和\b(全字匹配) - 查找填:
\bclass\s*=\s*["']old["'] - 替换填:
class="$1new"→ 错!因为没捕获引号,$1 不存在 - 正确写法:查找填:
class\s*=\s*(["'])old\1,替换填:class=$1new$1
关键点:$1 必须对应一个实际的 () 捕获组;\1 是查找阶段的反向引用,$1 是替换阶段的输出引用;两者不能混用。
替换完别忘了手动保存,否则全是内存操作
VSCode 的「Replace All」只修改编辑器内存中的文件副本,不会自动写入磁盘。即使你看到文件标签页多了 ● 圆点,也得按 Ctrl+S(或 Cmd+S)逐个保存,或用 Ctrl+Shift+S 保存全部已修改文件。
更隐蔽的问题是:如果某个匹配文件当前没被打开,VSCode 替换后根本不会为你创建新标签页——它默默改了内存,但你完全看不到变化,Git 也 diff 不出来。所以执行前务必确认 files to include 范围内,所有目标文件都处于「可被编辑状态」(即不是只读,也没被外部进程锁住)。


















