Skip to content

大家好,我是农村程序员,独立开发者,行业观察员,前端之虎陈随易。

如果本文能给你提供启发或帮助,欢迎动动小手指,一键三连 (点赞评论转发),给我一些支持和鼓励,谢谢。


北京时间 2025年2月7日VSCode v1.97 发布了。

由于年底的缘故,国外也是各种节日扎堆,这次的版本发布相距 v1.96 版本相隔近2月。

AI 编程趋势,浩浩荡荡,席卷全球,其中的佼佼者便是青出于 VSCode,胜于 VSCode 的 Cursor 编辑器。

背靠微软的 VSCode 当然也不甘落后,本次更新,重点仍然在 AI 编程方面,直追 Cursor,一起来捋捋都有哪些变化吧。

内核版本

内核版本

本次更新,内核版本基本不变。

根据官方计划来看,后续在 GPU 加速,性能提高方面会有进一步的优化升级,表示期待。

连续按 Tab 预测功能

连续按Tab预测功能

现在,VSCode 也实现了 Cursor 中的连续 Tab 完成,预测下一处改动的功能。

开启Tab完成和预测

此功能默认没有开启,配置参数为 github.copilot.nextEditSuggestions.enabled,可以在设置中搜索 nextEditSuggestions 并打钩即可。

代理模式 (实验性)

代理模式(实验性)

我们一直在为 Copilot Edits 开发一种新的代理模式。

在代理模式下,Copilot 可以自动搜索您的工作区以查找相关上下文、编辑文件、检查文件是否有错误,并运行终端命令 (经您允许) 以端到端地完成任务。

代理模式设置

您可以使用 Copilot Edits 视图中的下拉菜单在我们使用了几个月的当前编辑模式和代理模式之间切换。

要查看下拉菜单,请启用 chat.agent.enabled 设置。

今天就可以开始在 VS Code Insiders 中使用代理模式。

我们将逐步将其推广到 VS Code Stable 用户。

如果该设置在 Stable 中未显示,则表示尚未为您启用。

在代理模式下,Copilot 可以自动运行,但它只能编辑当前工作区内的文件。

当它想要运行终端命令时,它会向您显示该命令,并等待您查看并选择 继续,然后再继续。

**注意:**Copilot Edits 在代理模式下可能会使用许多聊天请求,因此它会定期暂停并询问您是否继续。您可以使用 chat.agent.maxRequests 自定义此设置。对于 Copilot 付费用户,此设置默认为 15,对于 Copilot 免费用户,此设置默认为 5。

Agentic 代码库搜索 (预览)

可以将 #codebase 添加到查询中,Copilot Edits 将发现与您的任务相关的文件。

我们已添加实验性支持,使用文件和文本搜索、Git 存储库状态和目录读取等附加工具来发现相关文件。

以前,#codebase 仅执行语义搜索。

可以使用 github.copilot.chat.edits.codesearch.enabled 启用它。

可重复使用的提示 (实验性)

此功能可让您构建、存储和共享可重复使用的提示。

提示文件是一个 .prompt.md Markdown 文件,其格式与在 Copilot Chat 中编写提示的格式相同,并且可以链接到其他文件甚至其他提示。

您可以附加提示文件以获取特定于任务的指导、帮助生成代码或保留完整的提示以供日后使用。

要启用提示文件,请将 chat.promptFiles 设置为 true,或使用 { "/path/to/folder": boolean } 表示法指定其他路径。

如果未指定其他路径,则默认使用 .github/prompts 文件夹来查找提示文件 (*.prompt.md)。

Copilot Edit 正式开放

Copilot Edit

VSCode 中的 AI 编程功能是由 Copilot EditCopilot Chat 两个扩展提供的。

在之前的版本中,Copilot Edit 功能是 Preview(预览) 模式,现在已经成为正式版了。

说实话,不愧是微软,体验过各种 AI 编辑器,Copilot 底部的添加文件等功能最为好用。

## 增强 Copilot Edit 控制

Copilot Edit控制

现在可以单独操作某一个改动是接受还是放弃。

延迟自动接受

可以通过 chat.editing.autoAcceptDelay 配置,设置延迟多少秒自动接受改动,0 表示禁用此功能。

延迟自动接收改动配置

可以在设置中搜索 autoAcceptDelay 设置,默认为 0,禁用状态。

代码应用到编辑区

代码应用到编辑区

Copilot Chat 中,可以使用代码块工具栏中的 应用于编辑器 操作将任何代码块应用于工作区中的文件。

本次对体验进行了几项改进:

  1. 操作悬停现在显示生成代码块的文件。
  2. 如果代码块针对的是不存在的文件,系统会提示您创建文件的位置。这可以是 Copilot 建议的文件路径、未命名的编辑器或当前活动的编辑器。
  3. 计算并应用更改时,将使用与 Copilot Edits 相同的流程和 UI。您可以单独查看、改进或放弃每项更改。

细节成就完美,非常看好 Cursor 和 Windsurf 等编辑器用户回归 VSCode。

时间上下文

时间上下文在编辑或生成代码时很有帮助,因为它可以向语言模型提供你最近交互过的文件的相关信息。

可以通过 github.copilot.chat.editor.temporalContext.enabled 启动行内 Chat 的时间上下文。

可以通过 github.copilot.chat.edits.temporalContext.enabled 启动 Copilot Edit 的时间上下文。

工作区索引状态 UI

工作区索引状态

当你通过使用 @workspace#codebase 向 Copilot 询问项目中的代码问题时,我们会使用一个索引来快速且准确地在你的代码库中搜索相关的代码片段,并将其作为上下文包含进来。

这个索引可以是 GitHub 管理的远程索引、本地存储的索引,或者是一个用于无法使用远程索引的大型项目的备用基础索引。

在本次更新中,在 VS Code 状态栏的语言状态指示器中新增了工作区索引,显示 Copilot 正在使用的索引类型以及相关信息,例如正在重新索引的文件数量。

要查看这些信息,只需点击 VS Code 状态栏中的 {} 图标即可。

构建远程工作空间索引

远程工作区索引由 GitHub 管理。

远程索引可以在短时间内为大型项目提供高质量的结果。

此外,它们只需要为每个 GitHub 项目构建一次,而不是每个用户构建一次。

考虑到所有这些优点,添加了几种将项目升级到远程索引的新方法:

  1. 运行新的 GitHub Copilot:Build Remote Index 命令。
  2. 在状态栏中的 {} 图标中选择 构建索引 按钮。仅当您的项目符合远程索引条件时才会显示此按钮。
  3. 在您看到的第一个 @workspac e 响应中选择 Build Index 按钮。仅当您的项目符合条件时才会显示,并且每个工作区仅显示一次。

请记住,目前只有具有 GitHub 远程的项目才能使用远程索引。

建立远程索引可能还需要一些时间,尤其是当您的项目很大时。

检查工作区索引状态 UI 以查看远程索引是否已完成。

工作区搜索改进

  1. 使用远程索引时改进了对本地更改文件的跟踪和处理。
  2. 添加了本地索引中已更改文件的后台更新,以便 @workspace 问题不必等待它们更新。
  3. 优化大型项目的 base index(基础索引)

Git 更改上下文变量

Git 更改上下文变量

在 Copilot 的 EditChat 中,现在可以使用 #changes 上下文变量引用在 Git 源代码管理中修改的文件。

例如,可以提示汇总我的工作区中的 #changes

模型可用性

更多模型选择

现在,使用 Copilot 时,可以选择更多模型。

Visual Studio Codegithub.com 聊天中的模型选择器中现在提供以下模型:

  1. OpenAI 的 o3-mini:OpenAI 为您的编码工作流程提供的最新推理模型,正在逐步推出并将提供给 GitHub Copilot Pro、Business 和 Enterprise 用户。
  2. Gemini 2.0 Flash:Google 的最新型号在代码建议、文档和代码解释方面表现出了极高的能力。此模型现已面向所有 GitHub Copilot 客户 (包括 Copilot Free) 开放。

在模型这个问题上,还是不如 Cursor 大方,后者已经可以直接接入 DeepSeek,极大降低模型使用的费用,要是 VSCode 也支持主流模型接入就好了,目前还有待观察。

增强的辅助功能声音

根据用户反馈改进了多种无障碍声音,以提高清晰度和辨识度。以下声音已更新:

  • accessibility.signals.save
  • accessibility.signals.lineHasFoldedArea
  • accessibility.signals.terminalQuickFix
  • accessibility.signals.lineHasInlineSuggestion

可以通过运行命令面板中的 Help: List Signal Sounds(帮助:列出信号声音) 命令来预览这些更新。

Copilot 编辑辅助功能帮助对话框

屏幕阅读器用户现在可以通过在输入框中调用 Alt+F1 来访问与 Copilot Edits 交互的指南。

此外,当编辑器包含待处理的 Copilot 编辑时,此状态现在会在编辑器帮助对话框中显示。

我们还引入了键盘快捷键,用于导航 下一个 Alt+F 5 / 上一个 Shift+Alt+F5接受 Ctrl+Shift+Enter放弃 Ctrl+Shift+Backspace切换差异视图 Shift+Alt+F7

源代码控制辅助功能帮助对话框

如果在源代码控制视图处于焦点状态时调用 Show Accessibility Help(显示辅助功能帮助) 命令,则会打开 源代码控制辅助功能帮助 对话框,为屏幕阅读器用户提供重要信息。

该对话框包含当前源代码控制状态的摘要以及有关视图及其导航方式的一般信息。

改进的屏幕阅读器通知

当检测到屏幕阅读器时,相关通知现在包含了解更多信息的链接,提供额外的背景信息和资源。

忽略文本转语音中的代码块

以前,当使用文本转语音读出 Copilot 响应时,代码块也会被大声读出。

现在可以使用 accessibility.voice.ignoreCodeBlocks 设置忽略文本转语音会话中的代码块。

移动命令面板和快速输入

移动命令面板和快速输入

现在可以将命令面板和其他快速输入移动到新位置,而不是将其固定在窗口顶部。

  • 拖放命令面板或任何其他快速输入,并将其对齐到中心和顶部。
  • 重新加载后保持位置,允许您为快速输入设置新的永久位置。
  • 可在自定义布局选择器中预设位置。

信任扩展发布者

信任扩展发布者

首次安装来自发布者的扩展程序时,您将看到一个对话框,帮助您评估扩展程序发布者的可信度。

此功能有助于确保您只安装来自可信来源的扩展程序,从而增强开发环境的安全性。

如果您安装扩展包或具有依赖项的扩展,信任发布者也会隐式信任与其一起安装的扩展的发布者。

当更新到 VS Code 1.97 版本时,当前安装的扩展的发布者将自动获得信任。

管理受信任的扩展发布者

您可以使用 Extensions: Manage Trusted Extensions Publishers (扩展:管理受信任的扩展发布者) 命令来管理受信任的扩展发布者。

此命令允许您重置或撤销对之前信任的发布者的信任。

**注意:**当没有打开 VS Code 窗口并且您从 CLI 安装扩展 (code-insiders --install-extension pub.name) 时,扩展会被安装,但发布者不会添加到受信任列表中。

输出面板过滤

输出面板过滤

现在可以过滤 输出 面板的内容,这可以极大地改善日志的管理和分析,特别是当您必须处理大量日志数据时。

  • **按日志级别过滤:**根据日志的严重性级别 (例如,错误、警告、信息) 过滤日志。这可以帮助您首先关注最关键的问题。
  • **按类别过滤:**按特定类别筛选日志,以便您隔离来自特定来源或组件的日志。类别是从日志数据中自动选取的。
  • **按文本过滤:**在日志中搜索特定文本以快速找到相关条目。

复合日志

复合日志

有时会发现信息分散在多个日志中,您需要一起查看它们才能获得完整的信息。

现在可以在一个复合日志视图中查看多个日志。结合新的过滤功能,分析日志的效果会好得多!

要创建自定义复合日志,请使用 Output(输出) 面板菜单中的 Create Compound Log(创建复合日志...) 操作。

还可以在编辑器或新的 VS Code 窗口中打开复合日志,以便灵活地监控和分析。

此功能通过提供相关日志的综合视图来提高您诊断问题的能力。

**注意:**复合日志视图目前在 VS Code 重启后不会保留。

导出和导入日志

现在可以使用 Output(输出) 视图菜单中的操作导出和导入日志。此功能通过简化日志共享和查看,增强了协作和日志管理。

Output(输出) 面板的菜单中选择相应的 导出日志导入日志 操作以导出或导入日志。

设置编辑器搜索修复

设置编辑器搜索修复

此次迭代中,修复了搜索查询中缺少字母时未显示预期结果的问题。

例如,当搜索 editor formonpast 时,设置编辑器找不到 editor.formatOnPaste 设置。

还修复了一个问题,即即使在狭窄的编辑器组中,设置编辑器也会在搜索过程中显示目录。

扩展过滤器增强

扩展过滤器增强

为了帮助您跟踪具有可用更新的扩展并查找最近更新的扩展,现在扩展视图中有两个新的过滤选项:@outdated@recentlyUpdated

SVG 图像预览支持

SVG 图像预览支持

内置图像预览现在对预览 SVG 文件有基本支持。

**题外话:**SVG 预览应该早就要支持了,这样可以减少安装一个额外扩展。

从 CLI 中删除工作区中的根文件夹

以前,您可以使用 --add 命令行选项将根文件夹添加到多根工作区。

现在还添加了使用新的 --remove 命令行选项从多根工作区中删除根文件夹的功能。

bash
code --remove /path/to/rootfolder

保留查找和替换历史记录

上一个里程碑,为编辑器查找控件引入了历史记录持久性。

在这个里程碑中,我们将其进一步扩展到替换输入控件,以便您可以在多个会话中分别维护两者。

替换历史记录存储在每个工作区中,可以通过 editor.find.replaceHistory 设置禁用。

关闭未提交评论时的确认

当按 Esc 或以其他方式关闭包含未提交评论的评论控件时,将显示确认对话框。

可以使用设置 comments.thread.confirmOnCollapse 禁用此确认。

评论编辑器中的快速操作

评论编辑器中的快速操作

可以从评论编辑器中使用快速操作。

Git blame 信息

Git blame 信息

在这个里程碑中,继续完善在编辑器和状态栏中显示 git blame 信息的功能。

还改进了将鼠标悬停在编辑器装饰或状态栏项目上时显示的信息。

git blame 状态栏项现在默认启用,可以使用 git.blame.statusBarItem.enabled 设置将其禁用。

使用 git.blame.editorDecoration.enabled 设置启用 git blame 编辑器装饰。

还添加了命令,以便使用命令面板或使用键绑定轻松切换 git Blame 信息:Git:切换 Git Blame 编辑器装饰Git:切换 Git Blame 状态栏

GitHub 存储库

GitHub 存储库

对于托管在 GitHub 上的存储库,在时间线上下文菜单和悬停、源代码控制图上下文菜单和悬停以及 git blame 编辑器装饰和状态栏项悬停中添加了一个新命令 在 GitHub 打开

GitHub 问题和拉取请求引用在时间线、源代码控制图、git blame 编辑器装饰和状态栏项悬停中呈现为链接,以便可以轻松地在浏览器中打开它们。

最后但同样重要的是,在时间线 ​​、源代码控制图和 git blame 编辑器装饰和状态栏项目悬停中添加了 GitHub 头像。

使用 github.showAvatar 设置禁用 GitHub 头像的渲染

源代码控制图操作

我们通过在上下文菜单中添加范围限制为历史项引用 (例如分支标记) 的操作来扩展源代码控制图视图的功能。

我们添加的第一个操作是 CheckoutDelete BranchDeleteTag,这些操作允许您轻松地从源代码控制图视图中直接签出分支/标记、删除分支和删除标记。

我们计划在即将到来的里程碑中添加更多操作。

单元格执行时的内联值

单元格执行时的内联值

笔记本编辑器现在支持使用设置 notebook.inlineValues 在单元格执行后显示内联值。

启用后,在成功执行单元格后,将根据已注册的 InlineValueProvider 的结果显示内联值。

如果没有提供程序,则后备方法会通过简单的正则表达式匹配将内核中找到的值与单元格文档进行匹配。

建议使用语言扩展中的提供程序以确保更准确的结果。

Markdown 单元格的自定义字体

Markdown 单元格的自定义字体

笔记本编辑器现在支持为渲染的 Markdown 单元格设置自定义字体系列。

这可以通过 notebook.markup.fontFamily 设置进行控制。

留空时,将使用默认工作台字体系列。

终端界面连字支持

此功能现已稳定,以下是自上一版本以来的更改摘要:

  • 启用设置从 terminal.integrated.fontLigatures 更改为 terminal.integrated.fontLigatures.enabled
  • 当光标或选择位于连字符内时,连字符现在暂时被禁用。
  • 使用 terminal.integrated.fontLigatures.featureSettings 设置连字符集和变体。这将在后台传递给 font-feature-settings CSS 属性。
  • 当我们用于解析连字符的库不受支持时,使用 terminal.integrated.fontLigatures.fallbackLigatures 手动设置连字符序列。

支持 ConEmu 的进度转义序列

进度转义序列

ConEmu 首创的 ESC ] 9 ; 4 转义序列现在支持在终端中报告进度。

一些 CLI 工具 (如 winget) 使用此转义序列来报告进度。

要查看终端选项卡中的进度,请将 ${progress} 添加到 terminal.integrated.tabs.titleterminal.integrated.tabs.description

这通常显示为进度微调器或百分比。

## 截断命令的粘性滚动

截断命令的粘性滚动

终端中的粘性滚动 (terminal.integrated.stickyScroll.enabled) 现在会在命令末尾用省略号截断时显示。

配置最后一个终端关闭时的行为

新的 terminal.integrated.hideOnLastClosed 设置允许配置当最后一个终端关闭时面板是否关闭。

除此之外,没有终端打开时的体验也得到了改善。

任务列号变量

新的 ${columnNumber} 变量可用于在 task.jsonlaunch.json 中引用光标位置的列号。

调试面板按值进行过滤和搜索

按值进行过滤和搜索

现在可以在变量和监视视图中的视图 (Ctrl+Alt+F) 内进行搜索,以筛选变量和表达式值,而不仅仅是名称。

在调试控制台中选择

调试控制台现在支持更长、更可靠的内容选择,允许更轻松地复制和粘贴。

JavaScript 调试器

现在可以使用命令面板或编辑器操作中的 Debug: Pretty print for debugging(调试:漂亮的调试打印) 命令漂亮地打印脚本,即使它们不是调试器当前暂停的源。

TypeScript 5.7.3

此版本包含 TypeScript 5.7.3 恢复版本。此小更新修复了一些导入错误和回归问题。

右键单击以从 Markdown 预览中打开图像

预览中打开图像

现在可以在 Markdown 预览中右键单击工作区图像并选择打开图像以在新编辑器中打开它。

当前工作区中的任何图像均支持此功能。

Markdown 链接验证状态项

Markdown 链接验证状态项

VS Code 的内置 Markdown 功能支持自动验证文件和图像的本地链接。

这是一种发现常见错误的好方法,例如链接到已重命名的标题或磁盘上不再存在的文件。

为了帮助您发现此功能,我们添加了一个新的语言状态项用于链接验证。

打开 Markdown 文件后,选择状态栏中的 {} 以查看链接验证状态。您还可以使用状态项快速切换链接验证的开启和关闭。

新的 Ruby 语法高亮语法

我们已经放弃了 textmate/ruby.tmbundle 中旧的、无人维护的 Ruby 语法,现在从 Shopify/ruby-lsp 获取我们的 Ruby 语法。

远程开发

远程开发扩展允许您使用开发容器、通过 SSH 或远程隧道的远程机器或适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。

亮点包括:

  • 连接到 Linux 旧服务器的迁移路径。
  • SSH 聊天参与者改进。
  • SSH 配置改进。
  • SSH 的默认远程扩展。

Microsoft 帐户现在使用 MSAL (Windows 上支持 WAM)

**注意:**由于存在严重错误,上个月推出的基于 MSAL 的 Microsoft 身份验证需要回滚。

此错误已修复,我们将继续推出。

帐户

为了确保 Microsoft 身份验证的强大安全基础,我们在 Microsoft 帐户扩展中采用了 Microsoft 身份验证库。

这项工作的突出特点之一是 WAM (Web 帐户管理器...也称为代理) 集成。

简而言之,我们现在直接与操作系统对话,而不是通过浏览器进行 Microsoft 身份验证流程,这是获取 Microsoft 身份验证会话的推荐方式。

此外,它更快,因为我们能够利用您已在操作系统上登录的帐户。

如果发现此新流程存在任何问题,请告诉我们。

如果确实发现重大问题并需要恢复到旧的 Microsoft 身份验证行为,则可以使用 microsoft-authentication.implementation 执行此操作 (将其设置为经典,然后重新启动 VS Code),但请记住,此设置不会持续很长时间。

因此,如果在使用 MSAL 流程时遇到问题,请提出问题。

Python:从终端启动本机 REPL

从终端启动本机 REPL

您现在可以从终端中的 REPL 启动 VS Code Native REPL。

python.terminal.shellIntegration.enabled 设置为 true 应该会在终端中的 Python REPL 中显示一个可点击的链接,允许您直接从终端打开 VS Code Native REPL。

Python:无需配置调试

无需配置调试

现在,您可以直接从终端调试 Python 脚本或模块,无需设置,这是新无配置调试功能的一部分!

Python:测试发现取消

测试发现取消

从测试资源管理器 UI 触发测试发现时,现在可以取消正在进行的测试发现调用。

使用 取消 按钮,该按钮在发现期间代替 刷新 按钮出现。

Python:跳转到定义处

跳转到定义处

Pylance 现在支持 跳转到定义,这可让更快地从函数或方法的使用处直接导航到其实现。

在使用继承的类时,此功能特别有用。

Python:AI 代码操作:生成符号 (实验性)

有一个新的实验性 AI 代码操作,用于使用 Pylance 和 Copilot 生成符号。

要试用它,可以启用以下设置:

json
"python.analysis.aiCodeActions": {"generateSymbol": true}

生成符号(实验性)

然后,一旦定义了一个新符号 (例如,一个类或一个函数),就可以选择使用 Copilot 代码操作生成符号,并让 Copilot 处理实现!如果愿意,可以利用 Pylance 的移动符号代码操作将其移动到其他文件。

GitHub 拉取请求和问题

GitHub Pull Requests 扩展取得了更多进展,它使您能够处理、创建和管理拉取请求和问题。

新功能包括:

  • 全局拉取请求查询,使用变量指定相对于今天的时间范围 (${today-7d})。
  • :<emoji-name>: 样式表情符号现在在评论中受支持。
  • 当您打开未签出的拉取请求的描述时,所有非过时的评论将显示在评论面板中。

基于 Tree-Sitter 的 Typescript 语法高亮

由于许多 Textmate 语法不再维护,我们一直在研究使用 Tree-Sitter 进行语法高亮显示。

目前已开始使用 TypeScript 的 Tree-Sitter 语法高亮,以便团队可以自行托管它并提供反馈。

您可以使用 editor.experimental.preferTreeSitter 设置试用早期预览版。

文档粘贴 API

文档粘贴 API 允许扩展程序挂接到文本文档中的复制/粘贴操作。

使用此 API,您的扩展程序可以:

  • 复制时,将数据写入剪贴板。这包括写入可在粘贴时拾取的元数据。
  • 粘贴时,生成应用粘贴的自定义编辑。这可以更改粘贴的文本内容或进行更复杂的工作区编辑,例如创建新文件。
  • 提供多种粘贴内容的方式。用户可以使用粘贴控件或 editor.pasteAs.preferences 设置来选择如何粘贴内容。

TypeScript 工作区中文件监视的资源优化

我们进行了一些优化,以减少文件监视在大型 TypeScript 工作区 (数千个 TypeScript 文件或项目) 中的开销。

具体来说,当打开这样的工作区并初始化监视程序时,您不再会看到 CPU 峰值,或者 CPU 使用率应该会很快稳定下来。

文件 openLabel 在简单文件选择器中显示

OpenDialogOptions 中的 openLabel 属性现在在简单文件选择器中受支持 (除了系统文件选择器,以前仅支持该属性)。

这允许您为文件选择器中的按钮提供自定义标签。

文件级评论 API

评论 API 支持创建和显示文件级评论。文件级评论显示在文件顶部,第一行之前。

它们不附加到文件中的特定行或范围。要显示文件级评论,请将评论范围设置为未定义。

要支持从评论范围提供程序留下文件级评论,请将 CommentingRangeProvider 上的 enableFileComments 属性设置为 true


往期文章:

何以解忧,唯有代码。不忘初心,方得始终。