VS Code 的聊天窗口终于能 搜索 了!

📅 2026/8/25 13:40:21
VS Code 的聊天窗口终于能 搜索 了!
你有没有在 VS Code 的聊天窗口Chat里试图按CtrlF找东西然后发现——啥也没发生对一直以来VS Code 的聊天窗口不支持原生的查找功能。你想在对话记录里找某个关键词要么靠肉眼扫描要么只能把内容复制到编辑器里再搜。反而zed在很早就支持这功能了。这个问题终于在新版本中被解决了。但真正让我觉得有意思的不是“他们加了个查找框”而是他们为了加这个查找框到底踩了多少坑。看起来简单做起来一点都不简单vscode干的事情表面上看就是给聊天窗口加了个CtrlF。但仔细看代码改动你会发现这玩意儿比想象中复杂得多。聊天窗口不是普通文本它是一堆混合内容的组合体Markdown 文本代码块链接引用折叠的思考过程Reasoning流式输出的内容如果直接对 DOM 做全文搜索你可能会搜到代码块里的内容但高亮又没法正确标记位置。或者搜到折叠内容里的文字但用户根本看不到那段内容。又或者正则表达式太复杂直接卡死渲染进程。几个让人头大的问题问题一折叠内容怎么办聊天窗口里有很多折叠的思考过程Reasoning它们默认是折叠的。如果你能搜到折叠内容里的文字但用户看不到那这个查找就没意义。所以实现里把 Reasoning 内容排除在了搜索范围之外——虽然理论上它能搜到但无法定位干脆不搜。问题二代码块怎么处理代码块在聊天窗口里是用 Monaco 编辑器渲染的不是普通 DOM。如果直接把代码块里的内容当作纯文本索引高亮逻辑就会出问题——因为它要同时处理 DOM 高亮和编辑器内高亮。实现里专门处理了这种情况把代码块里的匹配项单独标记用编辑器装饰decoration而不是 DOM 高亮来显示。问题三性能怎么保证聊天窗口可能有上千行内容如果每次搜索都要重新扫描整个 DOM会很卡。实现里用了分段索引transcript indexing把内容分块只搜索可见部分和必要的折叠部分。同时为了防止卡死还对匹配数量做了上限控制MAX_FIND_MATCHES避免极端情况下的性能问题。虽然vscode面临的问题很多但是使用却很简单方式和vscode之前的全局搜索几乎一模一样。最后很多人可能觉得“加个 CtrlF 有什么好说的”但正是这种看起来“简单”的功能往往是最能体现工程质量的。这个 新特性涵盖的场景包括普通文本搜索代码块内的搜索折叠内容的处理流式输出时的搜索正则表达式搜索高亮定位的准确性它不只是把浏览器原生 CtrlF 套了一层壳而是为聊天窗口这个特殊环境重新实现了一套查找系统。现在你在聊天窗口、聊天编辑器Chat Editor、甚至是 Agent 窗口里都可以用CtrlF来搜索对话记录了。这个功能现在已经合入主分支你可以在下一个 VS Code 版本或者 Insiders 版本里体验它了。以后在聊天窗口里找东西再也不用复制到编辑器里搜了——虽然你可能花了三秒钟才意识到这个变化。但下一秒你会发现它已经在悄悄工作了。