2025 年 12 月 (版本 1.108)
发布日期:2026 年 1 月 8 日
下载:Windows:x64 Arm64 | Mac:通用版 Intel silicon | Linux:deb rpm tarball Arm snap
欢迎来到 Visual Studio Code 2025 年 12 月版本。

传统上,12 月是我们团队专注于清理我们存储库中 GitHub issue 和 pull request 的时间。今年,我们成功地将未解决的 issue 减少了近 6,000 个,并对一千多个 issue 进行了分类。
除了我们的整理工作之外,我们还在 VS Code 的各个领域进行了一些改进和功能更新。
编码愉快!
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新页面。
Insiders:想尽快尝试新功能?
您可以下载每晚的 Insiders 构建版本,并尽快尝试最新更新。
下载 Insiders
代理
Agent Skills (实验性)
VS Code 现在支持 Agent Skills,让您可以教授编码代理新的功能并提供特定领域的知识。Agent Skills 是指令、脚本和资源的文件夹,GitHub Copilot 可以在相关时加载它们来执行专门的任务。
Skills 存储在带有 SKILL.md 文件的目录中,该文件定义了 skill 的行为。VS Code 会自动检测工作区中的 .github/skills 文件夹(或为向后兼容而设的 .claude/skills/)中的 skills。然后,当它们与您的请求相关时,它们会被按需加载到聊天上下文中。
通过启用 chat.useAgentSkills 设置来启用对 Agent Skills 的支持。
在 Agent Skills 文档中了解有关创建和使用 skills 的更多信息。
Agent Sessions 视图的改进
在本迭代中,我们通过多项增强功能进一步改进了 Agent Sessions 视图
- 支持键盘访问的操作,例如归档、读取状态、打开会话
- 显示并排视图时,根据状态和年龄对会话进行分组
- 提供有关已更改文件和会话相关 PR 的信息
- 支持从新的组部分一次性归档多个会话
- 通用可访问性改进

注意:chat.viewSessions.orientation 不再提供
auto选项。请改用sideBySide。
聊天
聊天选择器基于 Agent Sessions
聊天会话的快速选择器现在基于驱动 Agent Sessions 视图的相同信息。您可以从那里访问任何先前的聊天会话,并执行归档、重命名或删除等操作。

注意:也可以通过在快速打开控件中输入
agent来访问 Agent sessions(⌘P (Windows, Linux Ctrl+P))。
聊天标题改进
聊天视图标题控件现在会显示,无论活动栏如何配置。以前,它只在默认活动栏配置中显示。
要从一个会话快速跳转到另一个会话,请选择聊天标题以打开会话快速选择器并选择另一个会话。

重启时打开空聊天
设置:chat.viewRestorePreviousSession
从现在开始,当 VS Code 重启时,将不再自动恢复先前的聊天会话。取而代之的是,将显示一个空的聊天视图,您可以在其中从 Agent Sessions 控件访问先前的会话。
使用 chat.viewRestorePreviousSession 设置修改此行为。
终端工具自动批准默认规则
设置:chat.tools.terminal.enableAutoApprove, chat.tools.terminal.autoApproveWorkspaceNpmScripts
当启用了终端自动批准(chat.tools.terminal.enableAutoApprove)时,以下命令现在默认自动批准:
git ls-filesgit --no-pager <safe_subcommand>git -C <dir> <safe_subcommand>rg(排除--pre和--hostname-bin)sed(排除某些参数和用法模式)Out-String
此外,通过 npm、pnpm 或 yarn 运行的 npm 脚本,当它们包含在 package.json 中时,现在默认会自动批准。我们这样做是因为使用代理已需要工作区信任,并且我们保护代理免受编辑敏感文件(如 package.json)的影响。可以使用 chat.tools.terminal.autoApproveWorkspaceNpmScripts 禁用此功能。
为了提高自动批准的透明度,现在当规则被默认或自定义规则明确拒绝时,会显示一条信息性消息。

为未来的终端工具命令添加会话和工作区规则
允许命令或命令输入项的“允许”下拉菜单现在具有相应的操作,可允许它们在当前会话或工作区中执行。

终端工具阻止添加到 shell 历史记录
设置:chat.tools.terminal.preventShellHistory
当 shell 集成已启用并正常工作时,终端工具运行的命令不再包含在 bash、zsh、pwsh 和 fish 的 shell 历史记录中。此功能使用的方法因 shell 而异,例如,对于 bash,会设置 HISTCONTROL=ignorespace 并在运行的命令开头添加一个空格。
如果您希望将终端工具命令保留在 shell 历史记录中,请使用 chat.tools.terminal.preventShellHistory 设置进行配置。
辅助功能
在可访问视图中流式传输聊天响应
可访问视图现在会动态流式传输生成的聊天响应。以前,您需要关闭并重新打开可访问视图才能看到更新的内容。现在,您可以停留在可访问视图中并监视传入的输出,从而更容易实时跟踪 AI 响应。
MCP 服务器输出已从可访问视图中排除
为减少噪音,MCP (Model Context Protocol) 服务器输出默认已从可访问视图中排除。标准的聊天输出仍然完全可访问,因为它显示在文本区域中,该区域可以很好地与屏幕阅读器配合使用。
窗口标题中的语言 ID 变量
现在,window.title 设置可用一个名为 ${activeEditorLanguageId} 的新变量。此变量显示当前活动编辑器的语言标识符,这对于需要确定当前编程语言以启用适当语音命令的可访问性工具(如 Talon)非常有用。
"window.title": "${activeEditorLanguageId} - ${activeEditorShort}"
编辑器体验
通过拖放导入配置文件
您现在可以通过将 .code-profile 文件拖放到 VS Code 中来导入设置配置文件。这使得与团队成员共享配置文件或快速设置新环境更加容易。
当您拖放文件时,将打开“配置文件”编辑器,让您可以预览和导入配置文件。这提供了与拖放 .code-workspace 文件以打开工作区相似的体验。
复制面包屑路径
设置:breadcrumbs.symbolPathSeparator
现在,您可以使用“复制面包屑路径”命令将面包屑路径复制到剪贴板。当您需要与团队共享符号的确切位置或用于文档目的时,此功能非常有用。

breadcrumbs.symbolPathSeparator 设置使您可以自定义用于连接面包屑片段的分隔符字符。
工作区符号导航支持查询中的特殊字符
现在,当搜索查询包含 # 字符时,“工作区符号导航”(⌘T (Windows, Linux Ctrl+T))功能不再会错误地筛选掉所有结果。
此修复使 rust-analyzer 等语言扩展能够使用 # 作为符号搜索的修饰符。例如,在 rust-analyzer 中,将 # 追加到像 main# 这样的查询会仅搜索当前工作区中的函数。
代码编辑
新的代码片段转换
提供了两种新的代码片段转换:snakecase 和 kebabcase。以下是如何使用它们:
用于 snake_case 转换
${TM_FILENAME/(.*)/${1:/snakecase}/}
这将文件名转换为 snake-case 格式。例如,从 MyFileName.txt 转换为 my_file_name.txt。kebab-case 转换将是 my-file-name.txt。
源代码管理
Git Blame 信息设置
设置:git.blame.ignoreWhitespace, git.blame.editorDecoration.disableHover
新的 git.blame.ignoreWhitespace 设置使您可以配置 Git Blame 来忽略空格更改,从而确定哪个提交最后修改了某一行。这在处理经过重新格式化的代码时特别有用,因为它有助于您识别进行实际功能更改的提交,而不仅仅是空格调整。
此外,git.blame.editorDecoration.disableHover 设置允许您禁用在鼠标悬停在 Git Blame 编辑器装饰上时出现的悬停工具提示。如果您喜欢更干净的编辑体验,只想查看行内 Blame 注释而不附加的悬停信息,这可能很有用。
使用编辑器编写提交消息
很久以前,我们添加了使用完整编辑器编写提交消息的功能,但提交或取消的操作在编辑器标题工具栏中难以发现。我们改进了编辑器右下角的编辑器叠加控件,并将这些操作移至那里,以使其更易于使用。
Source Control Repositories 视图中的 Worktrees(实验性)
设置:scm.repositories.explorer, scm.repositories.selectionMode
在这个里程碑中,我们在 Source Control Repositories 视图中添加了一个 Worktrees 节点。在该节点下,您可以看到仓库 worktrees 的列表,并有一个内联操作可以在新窗口中打开 worktree。上下文菜单还包含一个在当前窗口中打开 worktree 的操作,以及一个删除 worktree 的操作。

您可以通过设置 scm.repositories.selectionMode 和 scm.repositories.explorer 设置来启用实验性仓库浏览器。尝试一下,让我们知道您还希望在 Repositories 浏览器中看到哪些其他仓库工件。
了解有关在 VS Code 中使用源代码管理的更多信息。
终端
终端 IntelliSense 默认用户体验重构
在过去的两个版本中,我们已将终端 IntelliSense 推广到所有 VS Code Stable 用户。虽然大部分反馈是积极的,但仍有一部分用户(主要是终端高级用户)不喜欢该功能破坏了他们的肌肉记忆。经过大量讨论,我们决定更改一些默认设置,改进可发现性,并允许更轻松地对该功能进行内联配置。
该功能本身仍默认启用,但与自动在键入时显示控件(快速建议和触发字符建议)不同,现在需要通过 Ctrl+Space 显式触发。
我们还改进了底部的“状态栏”。以前,它在左侧显示插入,在右侧显示“了解更多/配置”及其关联的键绑定。我们收到反馈,这些可操作性并不明显,因此我们现在在右侧显示图标,并且不再显示键绑定。左侧的操作现在允许在“选择模式”的选项之间旋转,这决定了当它出现时 Tab 和 Enter 的反应。右侧有一个新的眼睛图标,可以再次启用快速建议和触发字符建议。

最后,为了在不过于突兀的情况下使这一强大功能相对易于发现,打开终端时会显示一个提示,解释如何显示建议。提示的生命周期已简化,要永久删除它就像点击“不显示”一样简单,与编辑器中的类似功能相同。

除了这次用户体验重构之外,终端 IntelliSense 还进行了以下改进:
- 现在 macOS/Linux 上显示具有可执行位的文件
- 改进了
npm和git的完成项 - 对该功能进行了多项修复
性能和稳定性改进
此版本中,终端在性能和稳定性方面得到了一些重要的改进。
- node-pty#831:在 macOS 和 Linux 上,一次粘贴超过 50 个字符或让 Copilot 运行大型命令不再受到限制,并且应该几乎瞬间应用,其扩展性与 KB/MB 数据量的其他终端类似。这也修复了在 macOS 上执行相同操作时可能发生的崩溃。
- vscode#285031,vscode#285032,xterm.js#5548:修复了几个布局抖动问题,这些问题可能导致编辑器卡顿。
- vscode#239541:修复了在终端中配置 CommitMono 等字体时可能发生的崩溃。
更全面的自定义字形
终端的 GPU 加速渲染器(默认启用)支持自定义字形已有段时间,用于绘制框线、块元素和部分 powerline 符号。这意味着您无需配置字体即可看到这些字符,并且它们会随着行高、字母间距而缩放,并且应该完美对齐。
在此版本中,我们通过包含任何其他终端支持的大部分自定义字形,将支持的字符数量扩展到近 800 个。这包括在终端中通常有用的范围,特别是这些范围:
- 绘制框线(
U+2500-U+257F) - 块元素(
U+2580-U+259F) - 盲文图案(
U+2800-U+28FF) - Powerline 符号(
U+E0A0-U+E0D4,私有使用区) - 进度指示符(
U+EE00-U+EE0B,私有使用区) - Git 分支符号(
U+F5D0-U+F60D,私有使用区) - 遗留计算符号(
U+1FB00-U+1FBFF)
这是完整字形集的视觉效果。

改进了卷曲下划线的渲染
VS Code 已经可以解析和显示彩色和样式化下划线一段时间了,但卷曲下划线的渲染总是有待改进。卷曲下划线现在应该看起来与编辑器中的非常相似。

您可以在 bash 中运行此命令自己尝试:echo -e '\x1b[4:3mCurly\x1b[0m \x1b[4:3m\x1b[58;5;1mRed\x1b[0m'
调整大小时的尺寸视觉叠加
受ghostty中一项功能的启发,我们添加了一个短暂的叠加层,在您调整终端大小时显示当前的终端尺寸(列 x 行)。如果您想将终端调整到特定大小进行测试或其他目的,这很有用。

新的 VT 功能
终端现在支持以下 VT 功能/序列:
-
同步输出:应用程序可以使用它来暂停渲染并批处理终端更新,这对于防止重写缓冲区时出现撕裂特别有用。
- DECRQM(
CSI ? 2026 $ p) - BSU(
CSI ? 2026 h) - ESU(
CSI ? 2026 l)
- DECRQM(
-
XTVERSION(
CSI > 0 q):允许应用程序查询终端的详细信息,VS Code 的响应目前是“xterm.js”及其版本。
调试
按文件组织断点
设置:debug.breakpointsView.presentation
断点现在可以显示为树状结构,按文件分组。通过将 debug.breakpointsView.presentation 设置为 tree 来启用此功能。

测试
导航到未覆盖区域
我们在测试覆盖率工具栏中添加了导航按钮,让您可以轻松地在未覆盖的代码区域之间跳转。您可以使用命令面板中的“Test: Show Coverage Toolbar”命令切换测试覆盖率工具栏。

对扩展的贡献
GitHub 拉取请求
GitHub Pull Requests 扩展取得了更多进展,该扩展使您能够处理、创建和管理拉取请求和问题。新功能包括:
- 从 pull request 描述 webview 更改 pull request 的基础分支。
- 从 pull request 描述 webview 将打开的 pull request 转换为草稿。
- 为现有的 PR(而不仅仅是新的 PR)生成 pull request 描述。
查看扩展 0.126.0 的更改日志,了解此版本中的所有内容。
扩展开发
用于提示和资源 URI 的新快速选择器属性
快速选择器 API 包含两个新属性,用于创建交互式选择界面。
使用 QuickPick 上的 prompt 属性在输入框下方显示持久性的说明性文本。键入时文本保持可见,有助于提供指导或上下文。
const quickPick = vscode.window.createQuickPick();
quickPick.prompt = 'Select a file to open';
quickPick.items = items;
quickPick.show();
使用 QuickPickItem 上的 resourceUri 属性从资源 URI 自动派生项目属性。提供后,VS Code 将派生:
- 从文件名派生的
label(当设置为空字符串时) - 从文件路径派生的
description(当设置为undefined或空字符串时) - 从当前文件图标主题派生的
icon(当iconPath设置为ThemeIcon.File或ThemeIcon.Folder时)
这对于构建文件或文件夹选择界面很有用。
const items: vscode.QuickPickItem[] = [
{
label: '',
resourceUri: vscode.Uri.file('/path/to/app.ts'),
iconPath: vscode.ThemeIcon.File
},
{
label: '',
resourceUri: vscode.Uri.file('/path/to/src'),
iconPath: vscode.ThemeIcon.Folder
}
];
工程
内务管理
作为我们年度 12 月整理工作的一部分,我们花费了大部分时间来清理所有维护的存储库中的 GitHub issue 和 pull request。今年,我们成功地**将未解决的 issue 减少了 5,951 个,并对另外 1,203 个 issue 进行了分类**。



通过使用改进的分类工具和重复数据删除流程,我们能够关闭大量过时和已解决的 issue。这使我们的项目更易于管理,使我们能够继续开发对用户影响最大的功能。仅在我们核心 VS Code 存储库中,我们就关闭了 2,872 个 issue,并对另外 1,697 个 issue 进行了分类!

在 2025 年 6 月,我们也宣布 Copilot 已开源!这意味着所有相关的 issue 也将提交到 microsoft/vscode 存储库,并且我们还有一些遗留 issue 需要在 microsoft/vscode-copilot-release 中处理。本月,我们对该存储库中的所有 issue 进行了分类,并关闭了 1,659 个 issue,只剩下 175 个待迁移。

下面是一张图表,展示了我们核心 vscode 存储库的多年增长情况,以及我们出色的社区多年来做出了多少 issue 贡献。我们感谢所有多年来为我们的存储库贡献 issue 并与我们保持互动的人。您的反馈正是造就了今天的 VS Code!🚀

使用 TypeScript 编写扩展(实验性)
现在可以直接使用 TypeScript 编写 VS Code 扩展,而无需构建步骤。这可行……但仍有一些冒险之处!许多方面仍未经过测试,例如如何编写和运行测试、如何发布扩展以及其他工作流注意事项。
在此 GitHub 评论中了解有关此实验性方法的更多信息。
值得注意的修复
- vscode#283356 - 修复了导致滚动浏览部分聊天输出时跳动的回归问题
感谢
对 vscode 的贡献
- @abhijit-chikane (Abhijit Chikane):fix: 悬停焦点边框在角落被切断 PR #259548
- @alievilshat (Ilshat Aliyev):修复了 _shouldRenderHint 逻辑中的错误否定。 PR #242479
- @Andarist (Mateusz Burzyński):简化
TestInstantiationService#stub重载 PR #282223 - @anki-code (Andy Kipp):添加了 Xonsh shell 类型 PR #284044
- @aryla (Arttu Ylä-Outinen):修复粘性滚动悬停监听器堆积问题 PR #260020
- @AviVahl (Avi Vahl):fix:确保回退到默认系统等宽字体 PR #282747
- @BartolHrg:修复了多光标和空选区的复制问题 PR #256083
- @Beace (Beace):fix:修复终端 webgl 上下文内存泄漏 PR #279579
- @bibaswan-bhawal (Bibaswan Bhawal):fix(extensions): 允许 extensionButton.prominentBackground 生效 PR #276788
- @chaitanyamedidar (Chaitanya Medidar):修复滑动导航设置缺失描述 #281997 PR #282220
- @CyMad7001 (Cyril Madigan):#196344 - 修复安装程序挂起问题 PR #228233
- @daiyam (Baptiste Augrain):fix:正确传递扩展 ID(当版本也提供时) PR #279630
- @eidriahn (Adrian Luca):fix:修复悬停在快速选择器复选框上时图标不显示的问题 PR #285250
- @erezak (Erez Korn):Chat:从命令面板隐藏“在编辑器中应用” PR #283486
- @flying-sheep (Philipp A.):fix:为 Git 设置 LANGUAGE PR #285410
- @gjsjohnmurray (John Murray):标准化面包屑切换选项标签(修复 #257550) PR #284486
- @hickford (Mickford):反转行:当选区为单行时应用于整个文档 PR #257031
- @irengrig (Irina Chernushina):修复安装光标位置更改监听器时的内存泄漏 PR #267799
- @isksss (isksss): 更新:修复了可以在 vue 文件等中使用 MARK 的问题。 PR #283583
- @izolotarev (Igor): 修复 hsl 饱和度中的颜色检测 PR #266720
- @jakebailey (Jake Bailey): 用命名空间替换旧式 TS 模块 PR #282862
- @jcpetruzza (Daniel Gorin): debug: 修复了在“continue”时线程数量过多导致 UI 冻结的问题 PR #283635
- @JeffreyCA: 更新 Azure Developer CLI (azd) 的 Fig 规范 PR #281127
- @joeriddles (Joe Riddle): 向片段语法添加 snakecase PR #237110
- @josephxiao8 (Joseph Xiao): 删除重复行后预期的最终选择 PR #234799
- @junhaoliao (Junhao Liao): 抑制 WordHighlighter 的 runDelayer 触发器中的未处理错误。 PR #285887
- @kheif (Mehmet Ege Aydın): workbench:添加将编辑器移动到开始和结束位置的命令 PR #284999
- @kortin99 (Kortin Zhou): feat(snippets): 向片段 tmLanguage 语法添加对 kebab-case 的支持 PR #222319
- @maynkxx (mayank choudhary): docs: 在 README 中将 Twitter 品牌更新为 X PR #280235
- @milanchahar (MILAN CHAHAR): 修复终端图标选择器的位置 PR #281275
- @mizdra (mizdra): 修复在设置了
XDG_DATA_HOME的环境中失败的测试 PR #285402 - @MohamedEmirHajji (Mohamed Emir HAJJI)
- 向补全添加更多 git log 选项 PR #282311
- Markdown 预览:从滚动同步中过滤隐藏元素 (修复 #281247) PR #282506
- @murataslan1 (Murat Aslan)
- fix: 导航到下一个/上一个问题时避免跳跃式滚动 PR #285634
- 修复:使用 Event.once 替换终端标签页视图生命周期 hack PR #285657
- 修复:使用 Event.once 替换终端视图生命周期 hack PR #285661
- @NriotHrreion (Norcleeh): fix: 向新聊天发送消息时,最近的输入未保存到历史记录 PR #282633
- @odinGitGmail (odinsam): fix(debug): 支持调试控制台链接中的 C# 堆栈跟踪格式 PR #281536
- @przpl: fix(runSubagent): 收集计算出的附件 PR #283750
- @rducom (Raphael DUCOM): 修复 PowerShell 提示符检测中的 ReDoS PR #279853
- @RedCMD (RedCMD)
- 添加 TS/JS 模板的包围括号 PR #255972
- 修复 php 缩进 #248229 PR #258016
- 修复
modificationsIfAvailable时的 FormatOnSave PR #283726 - 支持 C 中的
# pragma折叠标记 PR #284927
- @remcohaszing (Remco Haszing): 修复编辑器边缘点击 PR #262964
- @Riya-chandra (RIYA_CHANDRA): 在命令面板中将命令描述显示为工具提示 PR #284609
- @SalerSimo (Simone Salerno)
- 从最近关闭的编辑器历史中排除终端编辑器 PR #282009
- 在 MoveLinesCommand 中重构虚拟模型创建逻辑 PR #284785
- @SimonSiefke (Simon Siefke)
- fix: 终端编辑器中的内存泄漏 PR #279088
- fix: 终端进程中的内存泄漏 PR #279167
- fix: 终端进程中的内存泄漏 PR #279172
- fix: 可访问性信号中的内存泄漏 PR #279242
- fix: 本地进程扩展主机中的内存泄漏 PR #279351
- fix: 扩展图标小部件中的内存泄漏 PR #280566
- fix: markdown 悬停中的内存泄漏 PR #280745
- fix: 调试会话中的内存泄漏 PR #281767
- fix: 状态栏中的内存泄漏 PR #282246
- fix: ipc 中的内存泄漏 PR #282253
- fix: chat 列表渲染器中的内存泄漏 PR #282560
- fix: notebook 代码滚动中的内存泄漏 PR #283452
- fix: 终端查找小部件中的内存泄漏 PR #283466
- fix: mainThreadLanguages 中的内存泄漏 PR #283498
- fix: chat 小部件中的内存泄漏 PR #284288
- fix: 终端 chat 小部件中的内存泄漏 PR #284325
- fix: call stack 小部件中的内存泄漏 PR #286246
- @sudip-kumar-prasad (Sudip Kumar Prasad): Fix: 使用 codicon id 作为 Command Prompt 的默认配置文件图标 PR #280967
- @tamuratak (Takashi Tamura)
- fix: 确保在 ChatWidget 中调用 finishedEditing PR #281763
- 在 sed in-place 选项检测中包含大写
-IPR #284645 - 修复 ChatWidget 中重新编辑时的上下文处理 PR #285099
- @ThanhNguyxn (Thanh Nguyen): fix: 面板最大化并居中对齐时不会关闭 (修复 #281772) PR #281773
- @tharani-2006: Terminal: 调整大小时显示尺寸叠加层 PR #284244
- @tt0mmy (Tommy): 修复终端建议配置中的重复描述 PR #279730
- @yavanosta (Dmitry Guketlev)
- 修复 EditContext 关闭时的向后选择 PR #273150
- InlineEditsView:移除 textModel 的重复声明 PR #281501
- SingleUpdatedNextEdit:正确应用插入更改 PR #281519
对 vscode-copilot-chat 的贡献
- @AbdelrahmanAbouelenin (ababouelenin): 更新 VSCModelB 的系统提示。 PR #2727
- @bharatvansh (Ayush Singh): fix(byok): 改进 Gemini 提供商的错误处理并添加测试 PR #2686
对 vscode-js-profile-visualizer 的贡献
- @xiaoxiangmoe (ZHAO Jin-Xiang): chore: 移除无用的 package-lock.json 文件 PR #216
问题跟踪
对我们问题跟踪的贡献
- @gjsjohnmurray (John Murray)
- @RedCMD (RedCMD)
- @tamuratak (Takashi Tamura)
- @IllusionMH (Andrii Dieiev)
- @albertosantini (Alberto Santini)
我们非常感谢大家在新功能准备就绪后立即进行试用,请经常回来查看并了解新功能。
如果您想阅读以前 VS Code 版本的发行说明,请访问 code.visualstudio.com 上的更新页面。