全局替换需先确认范围、校验正则再执行;ctrl+shift+f用于预览后替换,ctrl+shift+h直入替换视图但易跳过检查;正则须启用.*且符合ecmascript规范;默认排除node_modules等目录,需手动包含;替换前务必验证结果、缩小范围、核对捕获组。

全局替换不是“输完就点全部替换”,而是先确认范围、再校验正则、最后执行——否则一秒钟删掉二十个 import 语句,Git 都救不回来。
Ctrl+Shift+F 和 Ctrl+Shift+H 的区别到底在哪
很多人按 Ctrl+H 没反应,其实是误用了单文件替换快捷键。跨文件批量操作必须用 Ctrl+Shift+F(搜索)或 Ctrl+Shift+H(直接进替换视图)。前者适合先看结果再决定是否替换,后者省一步点击,但容易跳过预览。
-
Ctrl+Shift+F:打开搜索面板,输入后按Enter或点“查找全部”,结果列表可逐个展开查看上下文 -
Ctrl+Shift+H:直接进入带替换框的视图,右侧有.*、Aa、\三个关键开关,适合已有明确替换逻辑时使用 - 光标必须落在可编辑文件中,若状态栏显示
Read-only,替换按钮会灰掉
正则模式启用后,哪些写法在 VSCode 里才真正生效
VS Code 用的是 ECMAScript 正则引擎,不支持 \K、(? 等 PCRE 特性,但基础捕获和反向引用完全够用。关键是:写对了正则,却没点 <code>.* 图标,等于白写。
- 匹配所有
console.log调用并转为logger.info:
查找:console\.log$$([^)]+)$$,替换:logger.info($1) - 给所有 PHP 变量加前缀:
查找:\$[a-zA-Z_]\w*,替换:my_$&(注意$&表示原匹配内容) - 清除空行:
^\s*$$\n(末尾必须带\n,否则只清空白不删行) - 替换中要输出字面量
$,得写成$$;捕获组从$1开始,没有$0
为什么搜不到 node_modules 里的内容,以及怎么安全地包含它
VS Code 默认跳过 node_modules、.git、dist 等目录,这不是 bug,是性能保护机制。强行全盘扫描大型项目会卡死。
- 临时包含:在搜索面板右上角点
⋯→ 勾选Include ignored files - 长期控制:在
settings.json中配置search.exclude,例如:"search.exclude": {"**/build/**": true, "**/coverage/**": true} -
files.exclude只影响资源管理器显示,search.exclude才真正控制搜索范围,二者不能混用 - 限定类型比放开全局更安全:在
files to include输入*.ts或src/**/*,避免误改配置或 Markdown 文件
替换前最容易被忽略的三件事
VS Code 不提供 diff 预览,替换动作不可逆(除非你开了自动保存且 Git 已跟踪),所以这三步漏掉任何一项都可能引发线上事故。
- 先按
Enter或点“查找全部”,确认高亮结果全是你要改的地方——比如搜class,不开“全字匹配”会把classify也包进去 - 大项目中,若右下角出现
Too many results,说明匹配超阈值(约 10,000 行),立刻加files to include缩小范围 - 正则替换前,务必检查括号是否成对、捕获组编号是否对应;
$1写错成\1或$0,结果会变成字面字符串
最危险的操作,往往发生在你确信“这个正则绝对没问题”的那一刻——多点一次 Enter 看结果,比写十行回滚脚本更省时间。











