全局搜索搜不到vendor类引用,因vendor默认被Excluded;需右键取消Excluded或在Find in Path中选All Places范围,同时确保索引完成、Composer自动加载生效。

PhpStorm 的搜索功能在团队协作中不是“能不能搜到”的问题,而是“搜得准不准、改得稳不稳、信息分不分得清”的问题——它直接决定你改一行代码时,会不会误伤三处逻辑、漏掉两个配置、或把队友的 TODO 当成自己的任务。
全局搜索(Ctrl+Shift+F)为什么总搜不到 vendor 里的类引用?
默认 Scope 是 Project,但 PhpStorm 会自动把 vendor、node_modules、.git 标记为 Excluded 目录,它们不参与任何文本搜索,哪怕你写了 new GuzzleHttp\Client 也搜不到调用点。
- 右键点击
vendor目录 → Mark Directory as → 取消勾选 Excluded(仅临时调试用,切勿提交) - 更安全的做法:在
Find in Path对话框右上角 Scope 下拉菜单中,手动选 All Places 或新建自定义范围,显式包含vendor/** - 如果只想搜项目自身代码里对第三方类的引用,Scope 保持
Project Files,但要在底部File mask填*.php,避免被 JSON/YAML 配置文件干扰匹配
Search Everywhere(双击 Shift)搜不到新类名?先看索引有没有“呼吸”
类名、方法、服务容器别名这些语义级搜索,依赖完整索引。刚拉完分支、加了新 src/Service/UserExporter.php,双击 Shift 搜 UserExporter 没结果,90% 是因为索引还没刷完或没覆盖到该目录。
- 看右下角状态栏:有
Indexing…或Scanning files…?等它结束再试 - 强制重建索引:
File → Reload project from Disk,或点击索引条右侧齿轮图标 → Rebuild Index - 检查
Settings → Directories:确认src/没被误标为 Excluded;若用了符号链接,需在Settings → Editor → File Types中取消勾选 “Skip indexing for folders with name” 里的软链名 - Composer 自动加载未生效也会导致类不进索引——运行一次
composer dump-autoload
TODO 过滤器怎么只显示自己负责模块的任务?
默认 TODO 窗口(Alt+6)扫的是 All Places,里面混着框架源码、测试用例、甚至 IDE 模板里的 // TODO: implement me,根本没法用于真实协作。
立即学习“PHP免费学习笔记(深入)”;
- 点击 TODO 窗口右上角漏斗图标 → 切换 Scope 为 Project Files(排除
vendor和tests) - 去
Settings → Editor → TODO→ 在 Patterns 里新增正则:\bTODO\s*@alice\b,勾选 Case insensitive - 回到 Filters 区域 → 点 + → 新建过滤器,名称填 Alice's Tasks,只启用刚加的 @alice 模式
- 修改后必须关闭并重开 TODO 窗口(
Alt+6按两次),否则缓存不刷新,新规则不生效
Replace in Path(Ctrl+Shift+R)批量替换前,为什么一定要点 Find?
它不做语法分析,只做字符串暴力替换。不预览就点 All Files,user 会干掉 username、is_user、SQL 字符串里的 'user',甚至注释里的 // user role。
- 务必先点
Find,观察查找工具窗里高亮是否全是目标位置 - 勾选 Preview usages,弹出的
Replace Usage窗口里逐条确认:特别注意模板变量({{ user.name }})、SQL 字符串("WHERE user_id = ?")、注解(@param User $user) - 正则替换时:
$1引用捕获组,$$才输出字面量$;含换行需勾选 . matches newline(图标是\n) - 替换完成后,用
Git → Show History快速核对变更范围,防止跨文件误改
真正影响协作效率的,从来不是搜索快不快,而是搜索边界清不清楚、替换动作可不可逆、任务归属明不明白——这些细节藏在 Scope、索引状态、过滤器刷新机制和预览习惯里,漏掉一个,协作成本就翻倍。


















