ctrl+shift+h需在文件夹工作区生效,正则需点亮.图标,跨行用[\s\s],替换用$1而非\1或${1},排除目录和括号匹配错误易致静默失败。

Ctrl+Shift+H 打不开全局替换?先确认工作区已加载
VSCode 的 Ctrl+Shift+H(Win/Linux)或 Cmd+Shift+H(macOS)只在「文件夹工作区」下生效。如果右下角显示 No folder opened,那它实际退化为单文件替换——搜不到子目录里的内容,不是快捷键坏了,是根本没进全局模式。
- 必须通过
File → Open Folder…加载项目根目录,不能只用Open File… - 多根工作区(
.code-workspace)也支持,但检查左侧资源管理器里各文件夹图标无感叹号 - 打开后状态栏应显示路径,且搜索面板顶部图标是蓝色文件夹,不是灰色文档
正则模式没生效?别信“写了就算”,只认 .* 图标是否点亮
写 \d+ 却搜不到数字、^ 匹配不了行首、. 无法跨行——90% 是因为 .* 图标没点蓝。它不亮,所有元字符都当字面量处理,\n 就是反斜杠加 n, 在替换框里也原样输出。
- 焦点在搜索框时,按
Alt+R(Win/Linux)或Cmd+Option+R(macOS)最稳,右下角出现Regex标签才算真启用 - 每次关闭再打开搜索面板,
.*状态重置,不能依赖记忆 -
console\.log\((.*)\)这种写法本身没问题,但若.*没开,括号和点号全被当普通字符
跨行匹配总失败?. 永远不吞换行,改用 [\s\S] 或手动开 ↵
VSCode 默认 . 不匹配换行符,所以 function\s+\w+\s*\([^)]*\)\s*\{.*\} 在多行函数里必然断在第一行末尾。指望 UI 上那个 ↵ 图标?它只在 Ctrl+Shift+F 全局搜索中有效,Ctrl+H 单文件里根本没这开关。
- 安全写法:用
[\s\S]*?替代.*?,显式覆盖换行符,不依赖 UI 开关 - 匹配多行注释:
/\*[\s\S]*?\*/;匹配 JSX 中含换行的属性值:className="[\s\S]*?" - 性能警告:避免
[\s\S]*error这类无锚点开头的写法,大文件会卡死或触发Too many results
替换写 $1 没效果?JS 风格语法只认 $1,不是 \1 也不是 ${1}
VSCode 用 JavaScript 正则引擎,捕获组引用只支持 $1、$2,写成 \1 或 ${1} 都不会生效——界面不报错,只是静默忽略,结果就是“替了等于没替”。
- 查找:
import\s+\{([^}]+)\}\s+from\s+['"](.+)['"],两个括号分别捕获导入名和路径 - 替换必须写:
import $1 from '$2/$1',不能写import \1 from '$2/$1'或import ${1} from '$2/$1' - 要输出字面量
$,比如$price,得写成$$price;$&表示整个匹配内容 - 非捕获组
(?:...)不占编号,别指望它影响$1序号
Replace All 后才发现:files to exclude 里还挂着 node_modules/**,而你要改的其实是某个本地 fork 的包;或者 $1 引用的括号根本没闭合,导致整条正则静默失效——这些错误不会报错,只会让你改完发现什么都没变。











