ctrl+shift+f(windows/linux)或cmd+shift+f(macos)是vscode唯一全局搜索快捷键,仅作用于当前工作区;ctrl+f仅限当前文件,焦点需在编辑器内且不能处于终端或调试控制台。

Ctrl+Shift+F 是唯一有效的全局搜索入口,别试 Ctrl+F
嵌入式项目通常包含大量 .c、.h、.s、.ld、.dts 文件,还混着 Makefile、Kconfig、CMakeLists.txt —— 想在整棵树里找 CONFIG_SPI_FLASH 或 __attribute__((section(".isr_vector"))),必须用全局搜索。很多人按 Ctrl+F 后没反应,其实是它只搜当前打开的文件;焦点卡在终端(右下角显示 TERMINAL)或调试控制台时,Ctrl+Shift+F 也会失效,先按 Ctrl+` 切出来再试。
文件筛选必须手动填,src/** 和 *.c,*.h 不是可选项而是必填项
裸搜整个工作区会扫到 build/、out/、SDK/ 下的二进制或中间文件,既慢又干扰判断。嵌入式开发者应养成习惯:在“文件中包括”框里立刻填上:
-
src/**,drivers/**,include/**(限定代码主干) -
*.c,*.h,*.s,*.ld,*.dts,*.dtsi(排除脚本和文档) -
!build/**,!out/**,!SDK/**(显式排除生成目录,比靠files to exclude设置更可靠)
注意:src/**/drivers/** 这种嵌套写法不被识别,VSCode 只认扁平 glob;多个条件用逗号分隔,空格会被忽略。
正则替换改寄存器宏定义时,$$& 和 $1 容易写反
批量把 REG_BASE_ADDR + 0x10 改成 REG_BASE_ADDR + offsetof(struct reg_map, ctrl) 这类操作,离不开正则。但嵌入式常见翻车点是:
- 想插入字面量
$(比如$ctrl),却写了$&→ 实际输出为空或报错,必须写$$& - 用
(0x[0-9A-Fa-f]+)匹配偏移,替换时写offsetof(struct reg_map, $1)→$1才能取到捕获内容,$0无效 - 搜
#define\s+([A-Z_]+)\s+(0x[0-9A-Fa-f]+)时没勾.*按钮 → 正则不生效,结果为 0 条
建议先点 Enter 看高亮是否准确,再展开替换区域;全部替换 会跳过只读文件(如 SDK 头文件),不会警告。
搜不到 .dts 里的 compatible 字符串?检查 .gitignore 和搜索设置
设备树文件常被 .gitignore 排除(尤其自动生成的 .dts),导致全局搜索默认不扫它们。现象是:输入 compatible.*"st,stm32",结果为空,但文件明明存在。
解决方法只有两个:
- 临时关掉
Search: Use Ignore Files(命令面板输Preferences: Open Settings (UI)→ 搜该配置项 → 关闭) - 或者在“文件中包括”框里直接写
**/*.dts,**/*.dtsi,强制纳入扫描范围
不要依赖“排除”列表去反向推导——VSCode 的搜索路径逻辑是“先 include,再 exclude”,顺序和优先级必须明确。











