news 2026/8/25 13:40:15

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VS Code 的聊天窗口终于能 搜索 了!

你有没有在 VS Code 的聊天窗口(Chat)里试图按Ctrl+F找东西,然后发现——啥也没发生

对,一直以来,VS Code 的聊天窗口不支持原生的查找功能。你想在对话记录里找某个关键词,要么靠肉眼扫描,要么只能把内容复制到编辑器里再搜。反而zed在很早就支持这功能了。

这个问题终于在新版本中被解决了。但真正让我觉得有意思的,不是“他们加了个查找框”,而是他们为了加这个查找框,到底踩了多少坑

看起来简单,做起来一点都不简单

vscode干的事情,表面上看就是给聊天窗口加了个Ctrl+F。但仔细看代码改动,你会发现这玩意儿比想象中复杂得多。

聊天窗口不是普通文本,它是一堆混合内容的组合体

  • Markdown 文本
  • 代码块
  • 链接
  • 引用
  • 折叠的思考过程(Reasoning)
  • 流式输出的内容

如果直接对 DOM 做全文搜索,你可能会搜到代码块里的内容,但高亮又没法正确标记位置。或者搜到折叠内容里的文字,但用户根本看不到那段内容。又或者正则表达式太复杂,直接卡死渲染进程。

几个让人头大的问题

问题一:折叠内容怎么办?

聊天窗口里有很多折叠的思考过程(Reasoning),它们默认是折叠的。如果你能搜到折叠内容里的文字,但用户看不到,那这个查找就没意义。所以实现里把 Reasoning 内容排除在了搜索范围之外——虽然理论上它能搜到,但无法定位,干脆不搜。

问题二:代码块怎么处理?

代码块在聊天窗口里是用 Monaco 编辑器渲染的,不是普通 DOM。如果直接把代码块里的内容当作纯文本索引,高亮逻辑就会出问题——因为它要同时处理 DOM 高亮和编辑器内高亮。实现里专门处理了这种情况,把代码块里的匹配项单独标记,用编辑器装饰(decoration)而不是 DOM 高亮来显示。

问题三:性能怎么保证?

聊天窗口可能有上千行内容,如果每次搜索都要重新扫描整个 DOM,会很卡。实现里用了分段索引(transcript indexing),把内容分块,只搜索可见部分和必要的折叠部分。同时为了防止卡死,还对匹配数量做了上限控制MAX_FIND_MATCHES),避免极端情况下的性能问题。

虽然vscode面临的问题很多,但是使用却很简单,方式和vscode之前的全局搜索几乎一模一样。

最后

很多人可能觉得“加个 Ctrl+F 有什么好说的”,但正是这种看起来“简单”的功能,往往是最能体现工程质量的。

这个 新特性涵盖的场景包括:

  • 普通文本搜索
  • 代码块内的搜索
  • 折叠内容的处理
  • 流式输出时的搜索
  • 正则表达式搜索
  • 高亮定位的准确性

它不只是把浏览器原生 Ctrl+F 套了一层壳,而是为聊天窗口这个特殊环境重新实现了一套查找系统

现在你在聊天窗口、聊天编辑器(Chat Editor)、甚至是 Agent 窗口里,都可以用Ctrl+F来搜索对话记录了。这个功能现在已经合入主分支,你可以在下一个 VS Code 版本(或者 Insiders 版本)里体验它了。

以后在聊天窗口里找东西,再也不用复制到编辑器里搜了——虽然你可能花了三秒钟才意识到这个变化。但下一秒,你会发现它已经在悄悄工作了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 13:35:58

基于SpringBoot的共享汽车运营管理平台[源码免费+文档免费]

🍅全部选题源码免费分享、无偿获取,支持软件定制开发;由于篇幅限制,获取完整文章或源码、代做项目的,本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片。🍅 🍅全部选题源码…

作者头像 李华
网站建设 2026/8/25 13:33:10

C语言:结构体进阶

文章目录前言本文旨在系统性地介绍C语言中结构体的进阶知识。一、结构体类型声明1.1、嵌套结构体类型1.2、结构体的自引用1.3、typedef简化结构体类型1.4、匿名结构体类型1.4.1、匿名结构体类型唯一1.4.2、匿名结构体作为成员二、结构体数组三、结构体内存对齐3.1、对齐规则3.2…

作者头像 李华
网站建设 2026/8/25 13:32:24

React Hooks 为什么不能在条件分支/循环中调用?

React Hooks 为什么不能在条件分支/循环中调用?一、核心思路(一句话)React Hooks 通过"调用顺序(位置索引)"在 Fiber 节点的单向链表上匹配状态,而非通过名称或 key——任何改变调用顺序的写法都…

作者头像 李华
网站建设 2026/8/25 13:32:21

python学习笔记4 --Python的容器类型

第5章 Python的容器类型 5.1 容器概述 Python 提供了多种内置的容器类型,用于存储和组织数据。 内置的主要容器类型有: –列表list、元组tuple、字符串str、集合set、字典dict等, 另外Python还在collections模块中提供了更多容器类型,例如:双端队列deque等。 5.1.1 常见…

作者头像 李华
网站建设 2026/8/25 13:15:16

rocketMQ proxy架构分析

介绍proxy 模块是 RocketMQ 5.x 的 无状态代理组件 ,核心思路是:对外提供 gRPC 协议(面向多语言客户端),对内把请求翻译成 Remoting 协议访问 Broker/Namesrv,并原生支持 pop 消费模型。它有两种部署模式&a…

作者头像 李华
网站建设 2026/8/25 13:10:44

商业计划书最容易被忽略的加分项:清晰的图表表达

你好,我是小索奇。 本文围绕“商业计划书最容易被忽略的加分项:清晰的图表表达”展开,重点说明如何用流程图、结构图和数据图提升内容表达效率。本文重点:明确问题、拆分逻辑、选择图表类型,并用清晰段落帮助读者快速获…

作者头像 李华