ctrl+h(win/linux)或cmd+option+f(macos)用于当前文件替换,ctrl+shift+h(win/linux)或cmd+shift+h(macos)才是工作区全局替换入口,后者需先执行find all再replace all。

Ctrl+Shift+H(Win/Linux)或 Cmd+Shift+H(macOS)才是真正的全局替换入口,不是 Ctrl+H —— 后者只作用于当前文件,新手常在这里卡住。
Ctrl+H 和 Ctrl+Shift+H 到底有什么区别
很多人输完 Ctrl+H 发现改来改去就一个文件,是因为它压根不是“全局”功能:
• Ctrl+H(或 Cmd+Option+F)打开的是「当前文件内查找并替换」面板,光标必须在编辑器文本区才生效
• Ctrl+Shift+H(或 Cmd+Shift+H)才是「在文件中替换」,默认扫描整个工作区,但需手动确认范围和选项
• 如果你按了 Ctrl+Shift+H 却只看到当前文件结果,大概率是右上角状态图标显示灰色「文档」——点一下它,或再按一次快捷键,强制切到「文件夹」模式
为什么点了 Replace All 却没写入文件
VSCode 的 Replace All 操作只修改编辑器内存,不自动保存到磁盘:
• 替换后标题栏出现 ● 圆点,不代表已落盘,只是“有未保存更改”
• 必须手动按 Ctrl+S(单文件)或 Ctrl+Shift+S(全部已修改文件)
• 更隐蔽的问题:没被 VSCode 加载过的文件(比如从未打开过、或被 files.exclude 拦截的),Replace All 根本不会触碰它们
• 建议开启 File > Auto Save 并设为 afterDelay,避免漏存
正则替换总失败?重点看这三点
正则功能强大,但 VSCode 对语法和引用方式很严格:
• 替换字段里必须用 $1,写 \1 会静默失效(界面不报错,也不替换)
• .* 按钮点亮后,默认 . 仍不匹配换行符;要跨行,得额外勾选旁边的 .(dotAll)开关,或改用 [\s\S]*
• 中文括号、全角符号、未转义的 . 或 / 会导致正则静默不匹配——建议先关掉 .* 按钮,确认普通文本能搜到,再逐步加正则
限定 PHP/CSV 等特定文件类型怎么填
别依赖“默认扫所有”,不设过滤容易误改 node_modules 或配置文件:
• 在搜索面板下方「files to include」输入框里直接填 *.php 或 src/**/*.csv
• 想排除某目录,不要只删默认项,而是填 !dist 或 !**/tests/**
• 如果填了 **/*.ts 却没结果,检查右上角是否勾选了 Use Exclude Settings and Ignore Files——它会让 VSCode 尊重 .gitignore 和 settings.json 里的 files.exclude,此时得手动取消勾选
最常被忽略的一点:全局替换前,一定要点一下搜索框右侧的 .* 图标启用正则(如果要用),再按回车触发 Find All —— VSCode 不会自动扫描,Replace All 只对已高亮的匹配项起作用,漏扫等于白干。











