2024 年 1 月(版本 1.86)
更新 1.86.2:此更新解决了这些问题。
更新 1.86.1:此更新解决了这些问题。
下载:Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap
欢迎使用 Visual Studio Code 2024 年 1 月版本。此版本有许多更新,我们希望您会喜欢,其中一些主要亮点包括:
- 按窗口配置缩放级别 - 独立调整每个窗口的缩放级别。
- “Hey Code” 语音命令 - 使用语音命令开始聊天会话。
- 多文件差异编辑器 - 在差异编辑器中快速查看多个文件之间的差异。
- 触发断点 - 使用断点依赖项高效调试。
- 扩展的 Sticky Scroll 支持 - 在树视图和笔记本中支持 Sticky Scroll。
- Markdown 粘贴选项 - 对链接、视频和音频元素的丰富粘贴支持。
- 灵活的自动保存选项 - 出现错误时跳过自动保存或仅保存特定文件类型。
- 源代码管理输入 - 自定义提交输入和按语言划分的编辑器设置。
- 按扩展禁用通知 - 对按扩展禁用通知进行细粒度控制。
- GitHub Copilot 更新 - 改进的默认上下文、将文件添加为上下文、AI 修复。
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新页面。
内测版:想尽快尝试新功能?您可以下载每晚的内测版构建,并尽快尝试最新的更新。
辅助功能
警报
屏幕阅读器和盲文用户现在可以配置更多警报,例如命中调试断点时、当前行出现错误时等等。这些可以通过以 accessibility.alert 开头的设置进行配置,也可以使用帮助:列出警报命令进行浏览和配置。
使用“Hey Code”语音命令
借助新的 accessibility.voice.keywordActivation 设置,您可以启用 VS Code 监听“Hey Code”语音命令,以启动与 Copilot Chat 的语音会话。语音识别在本地计算机上计算,绝不会发送到任何服务器。
可用选项包括:
chatInView:从聊天视图开始语音聊天quickChat:从快速聊天控件开始快速语音聊天inlineChat:从编辑器中的内联聊天开始语音聊天chatInContext:如果焦点在编辑器中,则从内联聊天开始语音,否则从聊天视图开始语音聊天
以下示例显示了配置了 inlineChat 选项的“Hey Code”
状态栏中的一个小麦克风图标表示 VS Code 正在使用麦克风识别“Hey Code”。
语音聊天会话完成后,VS Code 将再次监听“Hey Code”以再次启动它。
要使用此新功能,需要以下扩展:
注意:语音识别在本地计算机上运行,绝不会发送到任何服务器。
工作台
恢复辅助窗口
在此版本中,与主窗口关联的所有打开的浮动窗口将在重新启动应用程序时恢复。这包括打开的编辑器以及辅助窗口的大小和位置。
树视图中的 Sticky Scroll
在编辑器中 Sticky Scroll 成功的基础上,我们将此功能扩展到所有树视图,使用户能够更轻松地导航项目树。可以使用 workbench.tree.enableStickyScroll 设置启用或禁用树视图的 Sticky Scroll。
为确保 Sticky Scroll 不占用太多空间,它被限制为视图高度的最大 40%。此外,用户可以通过配置 workbench.tree.stickyScrollMaxItemCount(默认设置为 7)来自定义最大粘滞元素数量。如果粘滞元素数量超过可显示的数量,如果树视图支持此功能,Sticky Scroll 将把最后的粘滞元素整合在一起。
为了改善树导航体验,您可以选择一个粘滞元素以直接跳转到树中的该元素。或者,按下父元素的 V 形箭头以隐藏其所有子元素。此外,启用 Sticky Scroll 后,访问复选框和操作项更加容易。
按窗口配置缩放级别
新的设置 window.zoomPerWindow 默认启用,它允许您配置缩放命令(放大、缩小、重置缩放)仅应用于活动窗口,而不是所有打开的窗口。以前使用这些命令不仅会应用于所有打开的窗口,还会更新 window.zoomLevel 设置。
我们相信使用这些命令更多的是一种临时手势,例如在进行演示时,因此应该只应用于调用它们的窗口。
从这个例子中可以看出,只有活动窗口的缩放级别发生变化,而另一个窗口没有变化
当窗口的自定义缩放级别与 window.zoomLevel 设置值不匹配时,状态栏中会显示一个缩放级别指示器。选择状态栏指示器以查找用于更改缩放级别、重置缩放级别或快速转到相关设置的控件。

具有自定义缩放级别的窗口会在重新启动和更改工作区时保留该缩放级别。
注意:将
window.zoomPerWindow配置为false可恢复以前的缩放级别行为。
更强大和灵活的自动保存选项
VS Code 提供了自动保存选项很长时间了。在此版本中,我们使此功能更加强大。
按资源或语言配置自动保存
所有自动保存设置现在都可以按文件夹或语言配置,这使您可以选择性地仅对特定语言或文件夹启用自动保存。
在下面的示例中,设置配置为:
{
"[markdown]": {
"files.autoSave": "afterDelay"
}
}
如您所见,编辑的 markdown 文件立即保存,而 TypeScript 文件保持脏状态。
出现错误时禁用自动保存
一个新的 files.autoSaveWhenNoErrors 设置允许您在自动保存本应保存编辑器时,如果文件中存在错误标记,则禁用自动保存。
当您有外部工具监视文件更改时,这非常有用,您希望避免这些工具对包含错误的已更改文件进行操作。
仅限工作区文件的自动保存
最后,一个新的设置 files.autoSaveWorkspaceFilesOnly 将自动保存限制为仅限于工作区内的文件。
允许按扩展禁用通知
我们现在提供更细粒度的控制,用于禁用来自扩展的通知。从通知浮动窗口中,您可以禁用该扩展的通知

在通知中心,有一个中心位置可以管理已触发通知的所有扩展的通知启用状态

此新功能补充了我们现有的请勿打扰模式,该模式全局禁用所有通知。与全局开关一样,错误通知将始终出现且无法禁用。
允许交换左侧和右侧差异编辑器
当您比较两个文件(例如从文件资源管理器中)时,会出现一个新操作,用于交换差异编辑器的左侧和右侧。
注意:比较两个可编辑文件允许您在任一侧进行更改。
从命令行读取 stdin 时不强制执行 --wait
使用终端时,您可以将进程的输出直接传递到 VS Code 以作为编辑器打开,例如:
- Linux 或 macOS 上的
ps aux | grep code | code - - Windows 上的
echo Hello World | code -
直到现在,这也意味着 --wait 标志,这意味着在您关闭编辑器窗口或完全关闭 VS Code 之前,您不会返回到终端提示符。在此里程碑中,从 stdin 读取时我们不再强制执行 --wait,因此您会立即返回到终端提示符。
注意:要恢复以前的行为,只需在命令行调用中附加
--wait。
使用本机标题栏支持自定义标题栏
我们引入了 window.customTitleBarVisibility 设置,它允许即使在使用本机标题栏时也显示自定义标题栏。这对于喜欢本机选项卡的 macOS 用户尤其有利。通过此新设置,本机标题栏用户现在可以访问自定义标题栏功能,例如:
- 命令中心:直接从自定义标题栏轻松访问命令中心。
- 布局控件:更灵活地自定义工作区布局。
- 活动栏自定义:将活动栏操作移至顶部。
- 编辑器操作自定义:将编辑器操作重新定位到自定义标题栏。
此外,对于喜欢全屏模式下整洁视图的用户,window.customTitleBarVisibility: "windowed" 选项允许您在全屏模式下隐藏自定义标题栏。此功能可确保在您不处于全屏模式时提供更专注、无干扰的编码环境,同时仍提供使用自定义标题栏功能的选项。

强制使用系统颜色主题的新设置
一个新的设置 window.systemColorTheme 允许您显式覆盖应用于 VS Code 中本机元素(例如 macOS 上的菜单或对话框)的系统颜色主题。该设置支持以下值:
default:颜色主题与操作系统匹配(默认选项)。auto:根据 VS Code 主题选择light或darklight:选择light系统主题dark:选择dark系统主题
下面是此设置如何应用于 macOS 上下文菜单的示例,其中顶部显示 light,底部显示 dark:

允许关闭未命名工作区而不进行确认
一个新的设置 window.confirmSaveUntitledWorkspace 允许您在关闭未命名工作区的窗口时禁用显示确认对话框。对话框上现在还有一个复选框,用于禁用显示它。window.confirmSaveUntitledWorkspace 设置默认启用,以保持当前行为。

注意:在我们的文档中了解有关未命名工作区的更多信息。
在输出面板中切换自动换行
输出面板现在支持使用视图:切换自动换行命令切换自动换行。这对于查看输出面板中的长行文本非常有用。
在新窗口中打开输出面板
输出面板现在在面板标题菜单中有一个在新窗口中打开输出操作,用于在单独的窗口中查看输出面板。
从 CLI 更新扩展
您现在可以使用 --update-extensions 参数从命令行更新扩展。这将把所有已安装的扩展更新到最新版本。
快速选择中的悬停现在使用自定义悬停
我们已将快速选择中的几个悬停改为使用自定义悬停而不是本机渲染。这允许更丰富的渲染和产品的一致性。

在差异编辑器中查看多个文件
在此版本中,多差异编辑器现已对所有用户启用。多差异编辑器允许您在一个可滚动视图中查看多个文件中的更改
目前,多差异编辑器可用于查看本地更改、暂存更改、传入/传出更改、暂存和拉取请求中的更改。它可以通过选择各种新的查看更改操作打开,这些操作可以通过多文件差异图标识别。
当从源代码管理视图打开差异编辑器时,它会随着文件被更改或暂存而动态更新视图。
多差异编辑器仍在开发中,因此预计在未来的版本中会看到更多改进和错误修复。
GitHub 拉取请求扩展中的多文件差异
安装 GitHub Pull Requests and Issues 扩展后,您可以设置 "githubPullRequests.focusedMode": "multiDiff" 以在打开拉取请求时自动打开多文件差异编辑器。
当您为 github.dev 设置好时,您可以在 GitHub 上的拉取请求上按 .,github.dev 将打开多文件差异编辑器以查看更改。
编辑器
粘贴文本/HTML 内容
粘贴为... 命令现在允许您粘贴剪贴板中的 text/html 内容

例如,当您从网页复制内容时,您可以使用此功能粘贴内容的 HTML 而不是将其粘贴为纯文本
源代码管理
提交输入自定义
在此里程碑中,我们添加了一个新设置 scm.inputMinLineCount,可用于控制提交输入字段的初始高度。控制提交输入字段最大大小的设置已从 scm.inputMaxLines 重命名为 scm.inputMaxLineCount,以匹配类似设置的命名约定。
用户现在可以使用特定于语言的编辑器设置进一步自定义提交输入字段。特定于语言的编辑器设置可用于定义编辑器规则并禁用自动换行
"[scminput]": {
"editor.rulers": [
50,
72
],
"editor.wordWrap": "off"
}
源代码管理存储库视图改进
为了更好地管理包含大量存储库的工作区,我们在存储库上下文菜单中添加了一个新命令:关闭其他存储库。我们还为关闭存储库和关闭其他存储库命令添加了多选支持,以便用户可以一次关闭多个存储库,或者关闭除少数几个之外的所有存储库。
源代码管理存储库视图可能会因为扩展贡献的操作而变得拥挤。为了解决这个问题,我们添加了通过右键单击操作并选择隐藏来隐藏贡献的操作的功能。隐藏的操作将移至...菜单中。所有操作,除了签出和同步之外,都可以隐藏。
传入/传出更改改进
我们继续完善源代码管理视图中的传入/传出更改部分。在此里程碑中,我们进行了更改,以便仅当当前分支具有跟踪远程分支时才显示传入更改节点。
我们已将获取和拉取操作添加到传入更改节点,并将推送操作添加到传出更改节点。
我们添加了用于查看每个单独提交的操作,以及利用多文件差异编辑器的所有传入/传出更改。
用户现在可以使用新设置 scm.showChangesSummary 来隐藏所有更改条目。
合并标签的能力
我们通过添加合并标签的功能来解决了长期存在的功能请求。命令面板中添加了一个新命令Git:合并...,它取代了Git:合并分支...命令。调用Git:合并...命令将显示一个快速选择控件,其中列出了分支和标签。
查看暂存命令
我们添加了一个新命令Git:查看暂存...,使用户能够在多文件差异编辑器中查看存储库中的任何暂存。查看 git 暂存时,编辑器标题菜单将包含应用/弹出或删除暂存的操作。
使用 SSH 密钥签署提交
在此里程碑中,我们添加了使用带有密码的 SSH 密钥签署提交的功能。使用 SSH 密钥签署提交时,VS Code 将在屏幕顶部显示一个快速选择控件,提示输入密码。VS Code 不会缓存密码,并且每次签署提交时都会提示输入密码。
Notebook
浮动窗口支持
笔记本编辑器现在可以在浮动窗口中打开。您可以将笔记本选项卡拖出主窗口以在新窗口中打开它,或使用视图:将编辑器移入新窗口命令。
内置变量视图
我们在“运行和调试”视图中添加了一个实验性变量视图,可用于查看笔记本内核中的变量(如果扩展提供了它们)。此功能可以通过此设置启用:
"notebook.experimental.variablesView": true
笔记本 Sticky Scroll
笔记本编辑器的 Sticky Scroll 功能得到了显著完善,以使其风格与工作台的其他部分保持一致,并为每个 markdown 元素添加折叠控件。
终端
选择下方显示的背景
启用 GPU 加速后,具有非默认背景颜色的单元格现在将渲染在常规选择颜色“下方”。

通过鼠标滚轮缩放终端
当启用此设置时,终端现在可以在按住 Ctrl 的同时通过鼠标滚轮放大和缩小:
"terminal.integrated.mouseWheelZoom": true
多行粘贴警告改进
在以前的版本中,terminal.integrated.enableMultiLinePasteWarning 接受 true(默认)或 false。当 true 处于活动状态时,它总是显示警告,除非启用了带括号的粘贴模式或行以 \n 字符结尾。此设置现在接受一个包含以下选项的字符串:
auto:以前的 true 行为always:始终显示警告never:从不显示警告
此外,对话框中还有一个新按钮,可将字符串粘贴为单行,这将删除所有 \r 和 \n 字符。
链接改进
文件协议 URI(file://)现在支持末尾的行号和列号扩展,就像大多数其他链接一样。还支持新的 #<line> 格式。
终端语音命令
新的终端:开始终端语音和终端:停止终端语音命令在终端中启用语音转文本会话。
要使用此新功能,请安装 VS Code Speech 扩展。
任务
路径分隔符变量的缩写
新的 ${/} 变量可以用作现有 ${pathSeparator} 变量的缩写。
调试
触发断点
您现在可以设置一旦命中另一个断点就自动启用的断点。例如,这在诊断仅在满足特定先决条件后才发生的故障情况时非常有用。触发断点适用于所有语言,并且条件断点也可以用作触发器。
可以通过右键单击字形边距,选择添加触发断点...,然后选择哪个其他断点启用此断点来设置触发断点。
主题:Codesong(在vscode.dev上预览)
会话结束时关闭只读文件
附加到调试器时,可能存在磁盘上不存在的内部或虚拟源文件,这些文件以只读方式打开。有一个新设置 debug.closeReadonlyTabsOnEnd,它会导致 VS Code 在会话结束时自动关闭调试会话中打开的任何只读文件。
测试
更多运行测试的方式
按住 Alt 同时单击测试装饰,现在会在可用时以调试模式运行该测试。
现在在资源管理器视图中有一个上下文菜单操作,可用于运行文件中或文件夹中声明的所有测试。
为扩展作者最终确定了 TestRunProfile.isDefault/onDidChangeDefault API
以前,TestRunProfile.isDefault 仅控制测试运行配置文件的初始默认状态,之后从未更改或读取。
在此版本中,用户更改其选定配置文件将反映在 TestRunProfile.isDefault 属性中,并触发相应的 TestRunProfile.onDidChangeDefault 事件。同样,当扩展更改 isDefault 时,这将导致 UI 中选定的配置文件更新。
语言
粘贴 URL 以自动创建 Markdown 链接
想把您复制的链接变成 Markdown 链接吗?当您将 URL 粘贴到选定文本的 Markdown 文件中时,VS Code 现在会自动插入一个 Markdown 链接
此功能由 markdown.editor.pasteUrlAsFormattedLink.enabled 设置控制。您可以更改它以自定义此行为:
smartWithSelection— 默认值。当您有选定文本且不在特殊元素(例如代码块)内时,此功能启用。smart— 与smartWithSelection相同,但不需要选择。always— 始终将 URL 粘贴为 Markdown 链接never— 禁用粘贴为 Markdown 链接。
粘贴值后,您始终可以使用“粘贴”控件切换以不同方式粘贴内容。
为 Markdown 配置音频/视频片段
新的 markdown.editor.filePaste.audioSnippet 和 markdown.editor.filePaste.videoSnippet 设置允许您自定义音频和视频文件在拖放或粘贴时如何插入到 Markdown 中。该片段可以使用以下变量:
${src}— 音频/视频文件的解析路径。${title}— 用于音频/视频的标题。将为此变量自动创建片段占位符。
新 Less 语法
以前的 Less 语法已归档,VS Code 现在使用来自 Better-Less 的语法进行 Less 语法高亮显示。
新 Go 语法
Go 语法高亮显示语法已更改为使用 Go Syntax,它比以前的语法维护得更活跃。
远程开发
远程开发扩展允许您通过 SSH 或远程隧道使用开发容器、远程机器或适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。
亮点包括:
- 在用户数据文件夹中创建
devcontainer.json。 - 使用 Dockerfile 时在
devcontainer.json中指定构建选项。
您可以在远程开发发行说明中了解有关这些功能的更多信息。
对扩展的贡献
GitHub Copilot
现在可以使用设置 editor.inlineSuggest.fontFamily 更改内联建议的字体系列。
保存前确认内联聊天
我们强调负责任地使用 AI,尤其是在源代码方面。因此,我们添加了一个新设置,要求用户在保存由 Copilot 生成的代码之前进行确认。此设置 inlineChat.acceptedOrDiscardBeforeSave 默认启用。
主题:GitHub Light Default(在 vscode.dev 上预览)
启用此设置后,文件保存将等待用户接受或丢弃任何挂起的内联聊天会话。这也适用于启用自动保存时,自动保存将暂时禁用,直到内联聊天结束。
按住说话模式
前段时间,我们为 VS Code 添加了语音支持。安装 VS Code Speech 扩展,它为聊天输入字段添加了语音转文本支持。
对于内联聊天,我们现在添加了“按住说话”,其工作方式如下:
- 按 Cmd+I 或 Ctrl+I 触发内联聊天。
- 按住按键并注意语音录制自动开始。
- 松开按键以停止录制并将您的请求发送给 Copilot。
主题:GitHub Light Default(在 vscode.dev 上预览)
此新模式还带有一个设置,默认启用,但可以通过 inlineChat.holdToSpeech 禁用。
预览:内联聊天快速语音
除了“按住说话”之外,我们还在试验此功能的更轻量级的替代 UI。按 Cmd+K 或 Ctrl+K 激活快速语音,然后按住 I。在按住 I 的同时,会显示一个更轻量级的录制 UI。松开后,请求会发送出去。

内联聊天实时模式
上一个版本有一个新的实验性内联聊天模式,称为 live3。它提供了更流畅的流媒体体验和更容易理解的差异视图。现在它已经毕业并取代了以前的 live 模式。默认值仍然是 livePreview,但我们鼓励用户尝试 live。我们也在进行一项实验,以了解哪种模式效果最好。
AI 修复的灯泡(火花)
要调用 Copilot,您还可以使用编辑器中的灯泡指示器。进行选择或将光标移动到新行,选择灯泡,然后选择使用 Copilot 修改或使用 Copilot 生成。
如果没有其他代码操作,灯泡将显示为火花,并将直接打开内联聊天。

#file 上下文变量
您已经可以使用在聊天输入中输入 # 来使用一些上下文变量,我们添加了 #file,允许您将工作区中指定的文件的内容作为上下文包含在聊天提示中。从输入中的建议控件中选择 #file,然后从出现的快速选择中选择一个文件。
如果可能,将包含文件的全部内容。如果内容太大而无法放入上下文窗口,则将包含文件的大纲,其中包含函数及其描述,但不包含实现。如果大纲也太大,则该文件将不包含在提示中。

聊天中的默认上下文
以前,我们默认将活动代码编辑器中的两种类型的上下文包含在聊天请求中:
- 如果有文本选择,则包含选择内容
- 如果没有选择,则包含活动编辑器可见视口中的代码范围
我们发现第二种类型在您想问一个通用问题时可能会导致混淆,但 LLM 将其解释为关于编辑器中包含的代码上下文的问题。我们正在试验默认情况下不包含视口中的代码,而只包含选定的代码。
当然,您经常想询问您在编辑器中可以看到的代码,因此我们添加了一个新的上下文变量 #editor。

添加了“清除所有工作区聊天”命令
每次您使用 + 按钮开始新的聊天时,您以前的聊天都会存储在您的工作区聊天历史记录中,您可以通过使用聊天视图标题中的时钟图标访问该历史记录。我们添加了清除所有工作区聊天命令,以便方便地清除您过去的所有聊天历史记录。
提交消息语言
生成 git 提交消息的代码现在使用 github.copilot.chat.localeOverride 设置以特定语言生成提交消息。
请求私有存储库的额外权限
为了为私有存储库启用额外的工作区搜索功能,我们需要额外的权限。如果检测到我们尚未拥有这些权限,我们将在启动时请求它们。一旦授予,我们将安全地存储会话以备将来使用。

Python
默认安装 Python Debugger 扩展
Python Debugger 扩展现在与 Python 扩展一起默认安装。
Python Debugger 扩展旨在将调试功能与主 Python 扩展分离,以防止兼容性问题。这确保了即使 Python 扩展放弃对旧 Python 版本(例如 Python 3.7)的支持,您也可以继续调试使用这些版本的项目,而无需降级您的 Python 扩展。它还提供了特定于平台的构建,确保您只收到与您的特定操作系统相关的组件,从而减少下载时间和不必要的开销。
这个新扩展复制了主 Python 扩展中可用的所有功能,甚至更多。
为确保您使用新的 Python Debugger 扩展,请将 launch.json 配置文件中的 "type": "python" 替换为 "type": "debugpy"。将来,Python 扩展将不再提供调试支持,我们将把所有调试支持过渡到 Python Debugger 扩展,以实现所有调试功能。
Python 解释器快速选择中的“创建环境”选项
您现在可以更方便地从 Python 解释器快速选择中创建 Python 环境。运行Python:选择解释器命令,然后选择创建环境选项以创建项目的新虚拟环境。
主题:Catppuccin Mocha(在 vscode.dev上预览)
工作区 conda 环境的改进显示
Python 解释器快速选择现在显示位于工作区中的 conda 环境的名称,以便更容易识别它们。

支持多级 pytest 类
使用多级 pytest 类时,顶层类现在显示在测试资源管理器中。以前,只显示较低级别类。
主题:Catppuccin Mocha(在 vscode.dev上预览)
Jupyter
为扩展作者最终确定了 Jupyter 内核执行 API
Jupyter 扩展用于针对 Jupyter 内核执行代码的 API 已最终确定。扩展可以使用 API 来针对内核执行代码。
API 用法的示例可以在 Jupyter 内核执行示例中找到。
npm 包 @vscode/jupyter-extension 包含所有 TypeScript 类型定义。
当扩展尝试访问 Jupyter 内核时,会提示用户授予或撤销对内核的访问权限。用户按扩展授予对 Jupyter 内核的访问权限。这意味着用户可以授予扩展 A 访问权限,并撤销扩展 B 的访问权限。
用户可以通过命令Jupyter:管理对 Jupyter 内核的访问权限按扩展管理(授予/撤销)对 Jupyter 内核的访问权限。
GitHub 拉取请求和议题
GitHub Pull Requests and Issues 扩展取得了更多进展,它允许您处理、创建和管理拉取请求和问题。新功能包括:
- 解决当前签出的 PR 的冲突。
- 问题查询的
groupBy属性。 - 单击已签出 PR 中的永久链接将在编辑器中打开文件。
- 悬停在评论反应上会显示谁做出了反应。
- 设置
"githubPullRequests.focusedMode": "multiDiff"将在签出时打开包含 PR 中所有文件的多差异编辑器。
查看扩展的 0.80.0 版本的更改日志以了解其他亮点。
预览功能
TypeScript 5.4 beta 支持
我们现在支持 TypeScript 5.4 的测试版。查看 TypeScript 5.4 测试版博客文章和 迭代计划以获取此版本的详细信息。亮点包括:
- AI 驱动的重构的初步工作。
- 一个新的
NoInferintrinsic,可以帮助库和类型作者阻止不正确的类型推断。 - 类型细化和类型检查的改进。
要开始使用 TypeScript 5.4 测试版,只需安装 TypeScript Nightly 扩展。请分享反馈,并告诉我们您是否遇到了 TypeScript 5.4 的任何错误。
快速搜索改进
在版本 1.82 中,我们引入了快速访问文本搜索(“快速搜索”),它允许用户从选择器中进行搜索。🔎
快速搜索现在具有以下功能:
- 活动选择上的编辑器预览。在浏览时在编辑器上下文中查看结果。
- 从快速搜索到搜索视图的更轻松导航。选择输入旁边的按钮或结果以将结果传输到搜索视图。
主题:Night Owl(在 vscode.dev上预览)
提议的 API
每个里程碑都会带来新的提议 API,扩展作者可以尝试这些 API。一如既往,我们希望得到您的反馈。以下是尝试提议 API 的步骤
- 查找您要尝试的提议并将其名称添加到
package.json#enabledApiProposals。 - 使用最新的 @vscode/dts 并运行
npx @vscode/dts dev。它会将相应的d.ts文件下载到您的工作区。 - 您现在可以根据该提议进行编程。
您不能发布使用提议 API 的扩展。下个版本中可能会有破坏性更改,我们绝不希望破坏现有扩展。
测试覆盖率 API
在此里程碑中,测试覆盖率的 API 和编辑器内体验已达到功能完善状态。我们鼓励扩展作者试用并提供反馈,以便在 VS Code 1.87 版本中最终确定之前进行预测。
虽然 API 太长无法包含在此处,但我们相信它非常简单明了,并欢迎您在问题 #123713中提出建议。
聊天代理 API
我们一直在开发一个 API,使扩展作者能够将自己的聊天代理贡献给 VS Code 中的聊天视图。我们对 API 进行了一些更改,包括:
- 传递给聊天代理的历史上下文现在正确地表示了给定消息调用了哪个聊天代理和命令、历史消息中变量的值以及结果是什么。
ChatAgentTask已被移除,现在可以在响应流中间使用ChatProgressMessage来涵盖相同的情况。- 所有“slashCommand”相关的术语都已重命名为“subCommand”。
如果您想试用该 API,可以从我们的示例聊天代理扩展开始,并订阅问题 #199908以获取 API 更新。
代码操作高亮 API
对于提取方法或移动到文件等重构,并不总是清楚操作将应用于哪些代码。对于像 TypeScript 这样试图智能地扩展用户当前选择的语言尤其如此。
此 API 允许代码操作提供一个或可能多个将应用于的范围(Range[])。当用户悬停或使用箭头浏览代码操作列表时,该范围将被突出显示。
- 对于重构,此范围将是当前文件中将受重构影响的代码。
- 对于快速修复,您可以突出显示相关的诊断。这已在从
editor.codeActionWidget.includeNearbyQuickFixes调用的快速修复中完成。
问题报告器 API
对建议的 API 进行了小的补充,允许 IssueUriRequestHandler 和 IssueDataProvider 一起使用。
还改进了 vscode.commands.openIssueReporter 命令,该命令现在可以贡献额外的扩展数据并修改 GitHub 问题指向的 URL。
订阅问题 #197863以获取 API 和 openIssueReporter 命令的更新或更改。
评论反应反应器 API
CommentReaction 接口有一个新的 reactors 属性,以便扩展可以指示谁对评论做出了反应。这些 reactors 当前显示在评论反应的悬停中。
请参阅问题 #201131以跟踪此 API 的进展。
最终确定的 API
新的 workspace.save 和 workspace.saveAs API
新的最终确定的 API workspace.save 和 workspace.saveAs 允许扩展触发保存编辑器的流程,无论是保存到其资源,还是要求用户提供资源。
所有保存方法都返回生成的 Uri,如果操作被取消,则返回 undefined。未命名文件将始终要求用户提供目的地,除非已关联路径。
FileSystemProvider API 的只读消息
使用 registerFileSystemProvider 注册 FileSystemProvider 时,可以将 options 设置为将整个文件系统标记为只读。现在,如果将 isReadonly 选项设置为 MarkdownString,则当用户尝试编辑文件系统中的文件时,该消息将显示在编辑器中。

工程
内务管理
在 12 月初,我们进行了年度整理。我们在存储库中实现了 1891 个问题的净减少。下图清楚地说明了我们年度整理迭代的必要性和影响。

Markdown 语言服务 0.4 版本
Markdown Language Service 包为 VS Code 的内置 Markdown 支持提供支持。新的 0.4 版本捆绑了我们在过去半年中进行的一些改进,其他工具和编辑器可以从中受益。以下是一些亮点:
- 为 Markdown 中的 HTML 片段启用文档链接、引用和重命名。
- 修复正则表达式中潜在的灾难性回溯。
- 避免在完成时添加额外的编码。
- 使用模糊匹配进行工作区符号搜索。
- 修复了一些有关链接检测/验证的案例。
新 localize2 函数使创建 ILocalizedString 更容易
在 VS Code 的核心代码库中,我们使用一个名为 ILocalizedString 的类型来同时渲染本地化字符串和英文字符串。如果您使用语言包并打开命令面板,您可能已经看到过这种情况。
以前,我们必须像这样编写这些表达式:
const str = { value: localize('id', 'Hello World'), original: 'Hello World' };
现在可以按如下方式表达:
const str = localize2('id', 'Hello World');
我们的本地化管道将接管这些 localize2 出现。
Electron 27 更新
在此里程碑中,我们将 Electron 27 更新推广到我们的稳定版本用户。此更新附带 Chromium 118.0.5993.159 和 Node.js 18.17.1。我们要感谢所有在 Insiders 版本上自行托管并提供早期反馈的人。
Linux 最低要求更新
在此里程碑中,我们更新了用于构建桌面客户端的工具链。从这个版本开始,VS Code 桌面仅与基于 glibc 2.28 或更高版本以及 glibcxx 3.4.25 或更高版本的 Linux 发行版兼容,例如 Debian 10、RHEL 8 或 Ubuntu 20.04。
如果您无法升级您的 Linux 发行版,推荐的替代方案是使用我们的Web 客户端。如果您想使用桌面版本,则可以下载 VS Code 版本 1.85。根据您的平台,请确保禁用更新以保留在该版本上。一个好的建议是使用便携模式设置安装。
值得注意的修复
感谢
最后但同样重要的是,向 VS Code 的贡献者们致以衷心的感谢。
问题跟踪
对我们问题跟踪的贡献
- @gjsjohnmurray (John Murray)
- @IllusionMH (Andrii Dieiev)
- @starball5 (starball)
- @RedCMD (RedCMD)
- @okineadev (Okinea Dev)
拉取请求
对 vscode 的贡献
- @a-stewart (Anthony Stewart)
- 在
editor.action.clipboardPasteAction上触发输入事件 PR #198822 - 在
getCustomBuiltinExtensionsFromLocations的错误消息中记录extensionLocation而不是locationPR #200748
- 在
- @Ajaykumbhare (Ajay Kumbhare):fix: terminal renaming not functioning as expected in editor area PR #202270
- @andrewbranch (Andrew Branch):Fix preferTypeOnlyAutoImports preference getter PR #201376
- @aramikuto (Aleksandr Kondrashov):Update IExplorerView interface PR #201992
- @audreygao (Audrey Ya Gao):Fix #193468 - Fix bug with error notification when pressing "l" on non-expandable reference item. PR #199996
- @bricker (Bryan Ricker):doc typo fix PR #202429
- @callumok2004 (Callum OKane):Add
bun.lockbto default file nesting under package.json PR #201065 - @CGNonofr (Loïc Mangeonjean):Take into account models created beforehand PR #199652
- @chartrandf (Francis Chartrand):timeline: use follow option so timeline follow file beyond renames PR #187174
- @conwnet (netcon):fix:
workbench.editorAssociationsnot work in workbench configurationDefaults PR #194087 - @cpendery (Chapman Pendery)
- fix: terminal suggestion positioning PR #199420
- fix: accepting terminal completions cursor positions PR #199706
- build: enable suggestions when 'shellIntegration.suggestEnabled' is true PR #199821
- refactor: xterm suggestion addon into terminalContrib PR #200107
- @DiscreteTom (DiscreteTom):fix #193746 PR #197523
- @effectivecui:avoid to enter the infinite loop when item.children is empty. PR #201701
- @Flanker32 (Hanxiao Liu):Update java workspace tags PR #197729
- @gayanper (Gayan Perera):Add support for breakpoint dependencies PR #166202
- @GenericTSDeveloper:Fixed issue Misalignment of suggestion details widget (https://github.com/microsoft/monaco-editor/issues/3373) PR #198730
- @gjsjohnmurray (John Murray)
- Implement keyboard navigation between list find/filter matches PR #180078
- Preserve sort order when filtering Git branch / tag quickpicks (fix #199471) PR #199473
Git: Merge Branch...picker duplicates branch name in description (fix #199562) PR #199742- Fix
Customize Layoutbugs related to Activity Bar (fix #200571) PR #200572
- @gregvanl (Greg Van Liew):Add missing commas PR #201137
- @harbin1053020115 (ermin.zem):fix: select theme according to current color theme in dev mode PR #190035
- @hsfzxjy (Xie Jingyi):Defer onDidStyleChange to Repl being visible PR #200473
- @iisaduan (Isabel Duan):fix typescript/54492: check if file rename changes extension PR #200220
- @impressivewebs (Louis Lazaris)
- Fixed some CSS terminology PR #202125
- Corrected CSS Hover Documentation text PR #202142
- @irgendwr (Jonas Bögle):Add: "Close Other Repositories" in git scm menu PR #130931
- @jacekkopecky (Jacek Kopecký):Fixes #198566: ellipsize left-cut search preview PR #198567
- @jaraco (Jason R. Coombs):Add support for extracting environment from xonsh. PR #201036
- @jeanp413 (Jean Pierre)
- Fix vscode.tasks.executeTask error Unexpected: Task does not exist after task.terminate() PR #200872
- Fix single tab context menu actions sometimes don't work PR #201021
- Fix task progress indicator does not appear after the first time PR #201064
- Fix single terminal tab rename action does not work PR #201128
- @johnsoncodehk (Johnson Chu):Fix optionalReplacementSpan not being applied to completion entries PR #200945
- @JoyceGu (Joyce Gu):add JS Vector DB libraries PR #199980
- @jtbandes (Jacob Bandes-Storch):Update Swift.tmLanguage PR #200698
- @keerthivasansa (Keerthi Vasan S A):Workbench actions for Tree Fuzzy Search Toggle PR #175137
- @khreenberg (Kim Reenberg):fix: fallback to strings for non-executable libc.so.6 PR #202581
- @kkocdko (kkocdko):Fix platform detection after Node.js 21 PR #200935
- @ksg97031 (KSG):docs: Fix typos in description of multiple argument for Go To commands PR #201122
- @Leask (Sixia "Leask" Huang):fix: tweak check-requirements for calling ldconfig PR #202645
- @loganrosen (Logan Rosen):Update Stack Overflow tag in CONTRIBUTING.md PR #126199
- @mahmoudsalah1993 (Mahmoud Salah):For open diff editors, resolve the underlying original editor to set … PR #201597
- @Malix-off (Malix):Remove unused import in
extensions/git/src/api/git.d.tsPR #200797 - @marrej (Marcus Revaj):# Fix dropping of partialAccepts PR #199663
- @MaxBR97:Added scm.inputMinLines configuration PR #200551
- @mohammadamin16 (Mohammad Amin):debug: close read-only tabs on end debug session PR #199898
- @mrienstra (Michael Rienstra):docs: document new
configuration.markdown.copyFiles.destinationoptions PR #203391 - @MrJithil (Jithil P Ponnan):chore: replace deprecated octal escape sequences with hex PR #197518
- @ngarside (Nathan Garside):Add syntax highlighting for
*.repofiles PR #199859 - @nrayburn-tech (Nicholas Rayburn):npm extension - check for root package.json before findFiles PR #124803
- @poeck (Paul Köck):chore: update copyright year PR #202344
- @r3m0t (Tomer Chachamu):Wait for paste to finish in paste command (fixes #196161) PR #196516
- @RedCMD (RedCMD)
- Change lowercase
lto uppercaseL.asp-vb-net.tmLanguage.jsonPR #201981 onDidChangeEmmiterfires constantly when it shouldn't PR #202198
- Change lowercase
- @remcohaszing (Remco Haszing):Remove bigNumbersDelta PR #194712
- @RobbyCBennett (Robby Bennett):make gotoErrorWidget styling of relatedInformation more consistent with that of markerHoverParticipant PR #195409
- @robertohuertasm (Roberto Huertas):feat(stash): return the stash result PR #177732
- @ronakj (Ronak Jain):Fix tsserver crashing when using custom node path PR #201966
- @russelldavis (Russell Davis):Fix race condition with restoration of problems when closing a file PR #183271
- @samhanic:[CLI] extension update command PR #199893
- @shubhisroking (Shubh):Replace the deprecated canceled with Cancellation Error. PR #197605
- @SimonSiefke (Simon Siefke)
- fix: memory leak in menubar PR #198052
- fix: memory leak in defaultWorkerFactory PR #198710
- @sparxooo (sparxooo):Fix for #200257 plus existing trailing non-numerics regex fix PR #200919
- @Splizard (Quentin Quaadgras):Mobile/Android: support text selection with a pen/stylus. PR #198578
- @susiwen8 (susiwen8)
- fix: #200046 PR #200485
- fix:
installinnpm scriptshouldn't be opened PR #201082
- @VDisawal:#198975: saveValue => historyNavigator.add PR #199142
- @wenfangdu (Wenfang Du):feat(git): added
autoClosingPairsin language configuration files PR #131403 - @Yesterday17 (Yesterday17):fix ExtHostLabelService typo PR #198855
- @yiliang114 (易良):fix: console format of fetchUrl PR #198909
- @zWingz (zWing):fix registerProfileContentHandler typos PR #183197
对 vscode-flake8 的贡献
- @maxg203 (Max Goodridge):Fix link in README.md PR #269
对 vscode-hexeditor 的贡献
- @IngilizAdam (Hasan Tuna):Select between offsets PR #470
对 vscode-languageserver-node 的贡献
- @debonte (Erik De Bonte):Support
WorkspaceEditMetadatainworkspace/applyEditPR #1390 - @MariaSolOs (Maria José Solano)
- @rroessler (Reuben Roessler):Changed Successful Exit Notification for Node Client PR #1404
- @sh-cho (Seonghyeon Cho):Update build status badge with Azure pipeline PR #1392
- @werat (Andy Hippo):Always delete feature providers in
unregister()PR #1380
对 vscode-pull-request-github 的贡献
- @Balastrong (Leonardo Montini):Create issue from markdown template PR #5503
- @joshuaobrien
- @pouyakary (Pouya Kary ✨):Fixes #5620 PR #5621
对 vscode-vsce 的贡献
- @sebas2day (Sebastiaan Brouwer):feat: Support for yarn workspaces PR #493
- @whosafe:Filter data from other platforms PR #912
对 language-server-protocol 的贡献
- @alcarney (Alex Carney)
- @asukaminato0721 (Asuka Minato):add-vscoq PR #1869
- @BeardedFish (Darian Benam):Add Apache Dispatcher Config to the Language Server Implementations list PR #1875
- @DanTup (Danny Tuppeny):Clarify snippet escaping rules PR #1868
- @Fomys (Louis Chauvet):Clarify CompletionItem.textEdit notes PR #1722
- @mhanberg (Mitchell Hanberg):fix typo in workspace/configuration PR #1823
对 monaco-editor 的贡献
- @kokovtsev (Dmitry Kokovtsev):fix: enable markdown in JSON completion details PR #4210
- @mevisioam:Expose JSON worker PR #4299
- @nora-soderlund (Nora Söderlund):chore(docs): fix monaco.d.ts link PR #4243
- @OfekShilon (Ofek)
- @soof-golan (Soof Golan):feat: Python 3.12 keywords support PR #4212
- @tamayika:Change JSON symbol information to document symbol PR #3894
对 node-jsonc-parser 的贡献
- @H4ad (Vinicius Lourenço):perf(format): cache breaklines and spaces as much as possible PR #81