全局替换没生效主因是工作区未正确加载或被search.exclude规则过滤;必须通过“Open Folder”打开顶层文件夹,检查并临时禁用排除设置,确认替换后手动保存。

全局替换没生效,八成是工作区没加载对,或者搜索范围被默认排除规则悄悄挡住了。
Ctrl+Shift+H 为什么没反应或只搜当前文件
VSCode 的 Ctrl+Shift+H(Windows/Linux)或 Cmd+Shift+H(macOS)不是万能快捷键——它只在已打开文件夹工作区时才真正“全局”。如果左下角状态栏显示 No folder opened 或只显示一个文件名(如 index.ts),那它实际退化为单文件替换。
- 必须用
File → Open Folder…打开项目顶层目录(如my-app/),不能只用Open File… - 多根工作区要确认所有文件夹都已加入且无感叹号图标(表示加载失败)
- 按一次
Ctrl+Shift+F再按一次Ctrl+Shift+H更稳,避免卡在“当前文件”模式
替换后部分文件没变,检查是否被 search.exclude 过滤
VSCode 默认跳过 node_modules、.git、dist 等目录,但你自定义的 search.exclude 可能误伤目标文件。比如想改 src/api/ 下的 URL,却因 "**/api/**": true 被整个屏蔽。
- 打开命令面板
Ctrl+Shift+P→ 输入Preferences: Open Settings (JSON),检查search.exclude和files.exclude - 临时绕过:在搜索面板右上角点击
⋯→ 取消勾选Use Exclude Settings and Ignore Files -
**/test/**会排除所有含test的子路径,而test/**只排除顶层test/目录
限定文件类型:用 files to include 精准控制范围
盲目全局替换风险高,尤其改 .vue、.ts、.css 等特定类型时,必须主动缩小范围。
- 在搜索面板右上角点
⋯→ 填files to include:如*.vue、src/**/*.ts、**/*.xml - 填
files to exclude:如!node_modules/**、**/legacy.css(注意!表示“不排除”) - 这些过滤仅本次有效;若长期需要,可写进
.vscode/settings.json,但别设成用户级配置,避免影响他人
正则替换踩坑:引用捕获组必须用 $1,不是 \1
VSCode 搜索引擎基于 JavaScript 正则,语法和行为与直觉有偏差。开 .* 模式后,稍不注意就白忙活。
- 捕获组引用只能用
$1、$2;写\1或$$1会静默失效(界面不报错,也不替换) - 查
class="([^"]+)",替换填class="$1 is-primary",不是class="\1 is-primary" - 中文括号、全角符号、未转义的
.或/会导致正则直接失效,建议先关.*确认文本能搜到,再逐步加正则 -
Replace All不写入磁盘,必须手动Ctrl+S或启用Auto Save→afterDelay
最常被忽略的一点:没在编辑器里打开过的文件,Replace All 对它们完全无效——VSCode 不会为未加载的文件创建内存副本。真要覆盖全部,得确保目标路径下的文件至少被“触达”过一次,或者依赖 Git 工具补位。


















