Zed 给 Agent 会话装上了“Ctrl+F”
Zed 的世界观一向很纯粹:性能即正义,毫秒级响应是底线。但这一次,zed 带来的不是新一轮的 GPU 渲染优化或数据结构屠榜,而是一个看似平淡无奇、实则处处透着工程智慧的新特性——给 Agent 面板加一个线程内搜索栏。
简单说,就是让你能在和 AI 的漫长对话里按 Ctrl+F 搜东西。听起来没什么了不起,对吧?但当你仔细端详这个 新功能 的设计决策时,会发现它简直是一堂关于“如何做正确的减法”的微型大师课。
另起炉灶的勇气:为什么不去复用现有轮子?
这个故事有一个戏剧性的前传。早在之前,就有人 试图用大一统的方式解决同样的问题:复用 Zed 核心编辑器久经考验的 BufferSearchBar 和 SearchableItem 能力,把搜索逻辑优雅地编织进现有的架构里。这听起来符合所有教科书式的软件工程美德——抽象、复用、解耦。
然后它被搁置了。
于是这个新功能的大佬做出了一个在程序员圈子里近乎“政治不正确”的决定:完全另起炉灶。他没有碰 BufferSearchBar,而是在 agent_ui 这个 内部手搓了一个定制版搜索栏,所有逻辑封装在自己的地盘里,干净利落。
这看起来像是在开架构倒车。但细想之下,这简直是天才级别的务实。Agent 面板的渲染模型和代码编辑器八竿子打不着——消息是 markdown 渲染的,历史用户输入挂在 MessageEditor 的内部 Editor 上,还有折叠的思考气泡、来自不同 session 的工具调用输出。这些元素的 DOM 结构、生命周期、数据模型各玩各的,强行用一个统一的 SearchableItem 去抽象它们,就像试图给猫、金鱼和仙人掌设计同一款衣服。表面上复用了代码,实际上是在给自己挖维护地狱。
这位大佬的策略是:把需求钉死在“搜索当前已加载线程的可见内容”这一个精确的点上,范围极窄,边界极清。这哪里是偷懒,这分明是外科手术式的精准克制——知道什么时候该架构优雅,更知道什么时候该挥刀自宫。
搜索的选择性失明:一场深思熟虑的 UX 作弊
这个搜索栏有一个让我拍案叫绝的设计决策:它故意忽略思考块和工具调用的实际输出内容。只搜用户消息、助手回复的文本块,以及工具调用的标签。
直觉上你可能会抗议:“我要全文搜索!每一个字符都要被索引!”但大佬冷静地指出了一个致命问题:工具调用输出在关闭重启 Zed 后根本不会被重新渲染。如果搜索索引了那些看不见的内容,用户会搜到一个高亮匹配项,却满屏找不到它在哪儿。这会制造出一种程序灵异事件般的糟糕体验——搜索引擎告诉你东西在这儿,但你的眼睛告诉你这页是空的。

所以大佬选择了让搜索保持“所见即所得”的诚实。你搜到的,一定是你眼睛能看到的。这是一种 WYSIWYG 哲学在搜索层的极致投射:我只为你所能感知的世界负责。看似阉割了功能,实际上避免了一整类诡异的 bug 和用户困惑。这种克制,比堆砌“全功能”更需要判断力。
下面来说说怎么使用
直接在右边的会话区域使用快捷键ctrl f

输入搜索内容
很多人觉得会话产生的内容太多了,会不会导致zed卡住,但数据表明,你基本不太可能遇到卡住的情况
“在一个接近上下文极限、有 919k token 的线程里搜索 ‘t.e’,感觉是即时的;在 2100+ 个结果中导航,响应速度跟上了键盘的自动重复率。”
这也许只有一个程序员之间才能心领神会的黑话:手感零延迟。
结语
选择另起炉灶而非强行复用——因为 Agent 面板的渲染模型和编辑器根本是两种生物。选择选择性失明而非假全文搜索——因为对不可见内容的搜索承诺本质上是谎言。选择把范围严格限定在“当前线程”而非跨线程跨 Agent——因为先把眼前的一亩三分地做到极致,比画一个永远填不完的大饼更有价值。
这是一场精心编排的小步舞曲,每一步都踩在克制的节拍上。它不试图解决宇宙级问题,只解决用户手指即将敲下 Ctrl+F 时的那份期待。而这份期待,被精准、冷静、完美地满足了。这,就是好工程的终极浪漫。
更多推荐



所有评论(0)