全局替换html标签必须用replace in files而非replace all,因后者仅预览不落盘;需限定*.html或*.vue范围,正则替换须启用.*模式并用\n、\s、.?精准匹配,操作前须分支备份、单文件测试、diff审查。

全局替换 HTML 标签必须用 Replace in Files,不是 Replace All
点右上角的 Replace All 按钮只是改内存预览,文件标题栏出现 ● 圆点 ≠ 已写入磁盘。真正落盘的操作是 Replace in Files(两个重叠文档图标),它会自动加载未打开的文件、执行替换、触发保存逻辑。
常见错误现象:替换了但 .html 或 .vue 文件里没变,Git diff 看不到改动 —— 八成是点了 Replace All 却没点 Replace in Files。
- 未打开的文件不会被
Replace All触达,但Replace in Files会 - 只读文件(右下角显示
Read-only)会被跳过,需先解除只读或以管理员权限运行 VS Code - 启用
Auto Save(File > Auto Save)可减少漏存,但不能替代手动确认
限定范围必须填 *.html 或 *.vue,不能只靠文件名猜
在“包含文件”输入框中必须显式填写 *.html 或 *.vue,否则默认搜索所有文件类型,可能误改 JS、CSS、JSON 甚至 node_modules 里的内容。
路径通配符容易踩坑:**/api/** 会排除所有含 api 的子目录(比如 src/utils/apiClient),而 src/api/** 才只排除顶层 src/api。
- 想只处理模板文件?填
*.html、*.vue或src/components/**/*.vue - 要排除生成目录?在“排除文件”填
dist/**、node_modules/**、build/** - 检查是否被静默拦截:按
Ctrl+Shift+P→ 输入Preferences: Open Workspace Settings (JSON)→ 查看search.exclude是否误删了你想搜的路径
替换多行标签要用正则 + \n,且必须开启 .* 模式
比如要把 <div class="old">...</div> 换成 <section class="new">...</section>,光靠普通文本替换会失败——因为中间有换行和空格。
启用正则模式(点击搜索框旁的 .* 图标),用 \n 匹配换行,用 \s* 匹配空白,用 (.*?) 捕获内容:
查找:<div class="old">\s*(.*?)\s* 替换:<section class="new">$1</section><ul> <li> <code>$1</code> 引用第一个捕获组,保留原内容不丢失</li> <li>避免贪婪匹配:用 <code>.*?</code> 而非 <code>.*</code>,防止跨多个标签误吞</li> <li>标签属性含双引号时,正则里要用 <code>"</code>;含单引号则用 <code>'</code>,别混用</li> </ul> <h3>替换前必须做三件事:Git 分支备份、小范围测试、Diff 审查</h3> <p>批量改标签结构极易引入渲染异常或样式断裂,尤其当组件依赖特定标签语义(如 <code><button></button></code> 被换成 <code><div>)或 CSS 选择器强耦合(如 <code>div.old</code>)时。<ul> <li>先 <code>git checkout -b replace-tags-20260904</code> 创建临时分支</li> <li>先对单个文件(如 <code>Header.vue</code>)跑一遍正则替换,跑 <code>npm run serve</code> 看是否报错或样式错乱</li> <li>执行 <code>Replace in Files</code> 后,立刻打开 Git 面板,逐个展开修改文件的 Diff,重点看是否误改了注释、JS 字符串里的 HTML 片段、或第三方库代码</li> </ul> <p>最常被忽略的是:正则匹配到了 JS 字符串里的 HTML(比如 <code>el.innerHTML = "<div>..."),这种地方不该动,得加负向断言或手动跳过。</div></code></p> </div></code></p> </div>











