vscode全局搜索用ctrl+shift+f(win/linux)或cmd+shift+f(macos),默认扫描整个工作区但排除.git、node_modules等;替换需先开搜索面板再点replace图标,支持$1引用捕获组、shift+enter换行,范围可借files to include/exclude过滤。

全局搜索用 Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)
这是 VSCode 里真正“项目级”搜索的入口,不是文件内搜索(Ctrl+F)——后者只搜当前打开的文件。全局搜索默认扫描整个工作区根目录下的所有文件,包括子目录,但会跳过 node_modules、.git 等被 .gitignore 或 VSCode 默认排除的路径。
常见错误是输完关键词直接回车,结果没匹配到:可能因为大小写敏感未关、正则模式误开、或搜索范围被意外限制。建议先确认右上角三个按钮状态:Match Case(大小写)、Match Whole Word(整词)、Use Regular Expression(正则)——日常替换通常只需关掉前两个,正则除非真要写 \bfunction\s+\w+ 这类模式,否则别开,容易误匹配。
替换操作必须先点开替换输入框,再按 Ctrl+Shift+H
Ctrl+Shift+H 是快捷键,但它的前提是:全局搜索面板已打开,且光标聚焦在搜索框里。如果面板没开,这个快捷键会无效;如果光标在编辑器里,它甚至可能触发别的命令。更稳妥的做法是:先用 Ctrl+Shift+F 打开搜索面板 → 在搜索框输入目标文本 → 点击搜索框右侧的 Replace 图标(或按 Alt+Enter),这时下方才会展开替换输入框。
替换时注意两个细节:
- 替换内容支持换行符:按
Shift+Enter换行,适合替换成多行代码块 - 若想预览替换效果,别急着点
Replace All,先逐个点Replace(单个)或看左侧文件树里的高亮标记 —— 有些匹配可能是字符串字面量里的误中,比如搜user却把"username"也替了
精准控制搜索范围:用 files to include 和 files to exclude
默认全局搜索太宽泛?比如只想改 src/ 下的 .ts 文件,或排除所有 .md。在搜索面板右上角点击 ...(更多选项),会出现两个输入框:
files to include:填 src/**/*.ts 或 *.js,支持 glob 语法
files to exclude:填 **/test/**, *.log,多个用英文逗号分隔
注意:这些过滤条件只影响本次搜索,不会改工作区设置。如果频繁用同一套规则,可以写进 .vscode/settings.json 的 search.exclude 和 files.include,但不推荐全局配置,容易干扰别人或 CI 构建行为。
正则替换要小心捕获组和转义,优先用 $1 而非 \1
VSCode 的替换引擎用的是 JavaScript 风格正则,捕获组引用必须用 $1、$2,不是 \1。比如想把 console.log("xxx") 改成 debug("xxx"),搜索填 console\.log\((.*)\),替换填 debug($1) —— 这里 . 和 () 必须转义,否则会被当正则元字符处理。
另一个坑是 Unicode 字符或换行符:默认正则不跨行,如果要匹配含换行的块,得在正则模式下启用 s 标志(即在搜索框末尾加 s),但 VSCode UI 不直接暴露 flag 输入,得写成 (?s)pattern。这种场景其实更适合用多光标编辑或扩展(如 multi-command),别硬刚正则。
复杂逻辑、带条件的替换,比如“只在函数体内替换”,VSCode 原生做不到,得靠 eslint --fix 或自定义 codemod,别指望搜索框全搞定。











