2024 年 1 月(版本 1.86)
更新 1.86.2:此更新解决了这些 问题。
更新 1.86.1:此更新解决了这些 问题。
下载:Windows:x64 Arm64 | Mac:通用 英特尔 硅 | Linux:deb rpm tarball Arm snap
欢迎使用 Visual Studio Code 的 2024 年 1 月版本。此版本中有很多更新,我们希望您会喜欢,其中一些主要亮点包括
- 每个窗口的缩放级别 - 独立调整每个窗口的缩放级别。
- Hey Code 语音命令 - 使用语音命令开始聊天会话。
- 多文件差异编辑器 - 在差异编辑器中快速查看多个文件的差异。
- 触发断点 - 使用断点依赖关系进行高效调试。
- 扩展的粘性滚动支持 - 树视图和笔记本中的粘性滚动。
- Markdown 粘贴选项 - 针对链接、视频和音频元素的富文本粘贴支持。
- 灵活的自动保存选项 - 在发生错误时跳过自动保存,或仅为特定文件类型保存。
- 源代码管理输入 - 自定义提交输入和每个语言的编辑器设置。
- 扩展通知 - 针对每个扩展的通知禁用提供细粒度的控制。
- GitHub Copilot 更新 - 改进的默认上下文、将文件添加为上下文、AI 修复。
如果您想在线阅读这些发行说明,请访问 更新,网址为 code.visualstudio.com。
内部人员:希望尽快尝试新功能?您可以下载 nightly 内部人员 版本,并在新功能可用后立即试用。
辅助功能
警报
屏幕阅读器和盲文用户现在拥有更多可配置的警报,例如,在调试断点命中时、如果当前行存在错误以及更多情况。可以通过以 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”以再次开始。
要使用此新功能,需要以下扩展
注意:语音识别在您的机器上本地运行,永远不会发送到任何服务器。
工作区
恢复辅助窗口
在此版本中,与主窗口关联的所有打开的浮动窗口将在您重新启动应用程序时恢复。这包括打开的编辑器以及辅助窗口的大小和位置。
树视图中的粘性滚动
基于编辑器中粘性滚动的成功,我们将此功能扩展到所有树视图,使用户能够更轻松地浏览项目树。可以使用 workbench.tree.enableStickyScroll
设置启用或禁用树视图的粘性滚动。
为了确保粘性滚动不会占用太多空间,它被限制为视图高度的 40%。此外,用户可以通过配置 workbench.tree.stickyScrollMaxItemCount
来自定义最大粘性元素数量,该设置默认设置为 7。如果粘性元素数量超过可显示的数量,则粘性滚动将合并最后的粘性元素,如果树视图支持此功能。
为了获得更佳的树导航体验,您可以选择一个粘性元素以直接跳转到树中的该元素。或者,按父元素的尖括号以隐藏其所有子元素。此外,启用粘性滚动后,更易于访问复选框和操作项。
配置每个窗口的缩放级别
新的 window.zoomPerWindow
设置(默认情况下处于启用状态)让您可以配置缩放命令(放大、缩小、重置缩放)以仅应用于活动窗口,而不是所有打开的窗口。以前使用这些命令不仅会将其应用于所有打开的窗口,还会更新 window.zoomLevel
设置。
我们认为使用这些命令更多的是一个临时操作,例如在演示时,因此应该只应用于调用它们的窗口。
正如您从此示例中看到的那样,只有活动窗口的缩放级别发生了变化,而另一个窗口则没有变化
当窗口的自定义缩放级别与 window.zoomLevel
设置值不匹配时,状态栏中会显示一个缩放级别指示器。选择状态栏指示器以查找用于更改缩放级别、重置缩放级别或快速转到相关设置的控件。
具有自定义缩放级别的窗口会在重新启动和工作区更改时保留该缩放级别。
注意:将
window.zoomPerWindow
配置为false
以恢复以前的缩放级别行为。
更强大、更灵活的自动保存选项
VS Code 很早就提供了自动保存选项。在此版本中,我们使此功能更加强大。
为每个资源或语言配置自动保存
现在可以为每个文件夹或语言配置所有自动保存设置,这使您可以选择性地仅为特定语言或文件夹启用自动保存。
在以下示例中,设置配置为
{
"[markdown]": {
"files.autoSave": "afterDelay"
}
}
如您所见,已编辑的 Markdown 文件立即保存,而 TypeScript 文件保持脏状态。
在发生错误时禁用自动保存
新的 files.autoSaveWhenNoErrors
设置让您可以在文件存在错误标记时禁用自动保存,而自动保存通常会保存编辑器。
当您有外部工具监视文件更改时,这很有用,在这种情况下,您希望避免这些工具对包含错误的已更改文件进行操作。
仅为工作区文件自动保存
最后,新的 files.autoSaveWorkspaceFilesOnly
设置限制自动保存仅针对工作区内的文件。
允许禁用每个扩展的通知
我们现在为禁用来自扩展的通知提供了更细粒度的控制。从通知吐司中,您可以禁用扩展的通知
在通知中心,有一个中央位置可以管理所有已触发通知的扩展的通知启用状态
此新功能补充了我们现有的勿打扰模式,该模式全局禁用所有通知。与全局开关一样,错误通知将始终出现,无法禁用。
允许交换左右差异编辑器
当您比较两个文件(例如,从文件资源管理器)时,会出现一个新的操作来交换差异编辑器的左右两侧。
注意:比较两个可编辑的文件允许您在任一侧进行更改。
不要在从命令行读取标准输入时强制执行 --wait
使用终端时,您可以将进程的输出直接传递到 VS Code 中以打开为编辑器,例如
ps aux | grep code | code -
在 Linux 或 macOS 上echo Hello World | code -
在 Windows 上
到目前为止,这也暗示了--wait
标志,这意味着您只有在关闭编辑器窗口或完全关闭 VS Code 后才能返回到终端提示符。在本里程碑中,我们不再强制执行--wait
从 stdin 读取时,因此您会立即返回到终端提示符。
注意:要恢复以前的 behavior,只需将
--wait
追加到命令行调用中。
支持使用原生标题栏的自定义标题栏
我们引入了window.customTitleBarVisibility
设置,它允许即使使用原生标题栏也显示自定义标题栏。这对于喜欢原生标签的 macOS 用户尤其有利。使用此新设置,原生标题栏用户现在可以访问自定义标题栏功能,例如
- 命令中心:从自定义标题栏直接轻松访问命令中心。
- 布局控件:更灵活地自定义您的工作区布局。
- 活动栏自定义:将活动栏操作移到顶部。
- 编辑器操作自定义:将编辑器操作重新定位到自定义标题栏。
此外,对于那些在全屏模式下喜欢简洁视图的用户,window.customTitleBarVisibility: "windowed"
选项允许您在全屏模式下隐藏自定义标题栏。此功能可确保更专注、无干扰的编码环境,同时在您未处于全屏模式时仍提供使用自定义标题栏功能的选项。
新的设置以强制执行系统颜色主题
一个新的设置window.systemColorTheme
允许您明确覆盖应用于 VS Code 中原生元素(如 macOS 上的菜单或对话框)的系统颜色主题。此设置支持以下值
default
:颜色主题与操作系统匹配(默认选项)。auto
:根据 VS Code 主题选择light
或dark
。light
:选择light
系统主题。dark
:选择dark
系统主题。
以下是此设置应用于 macOS 上下文菜单的示例,上部显示light
,下部显示dark
。
允许在没有确认的情况下关闭未命名的工作区
一个新的设置window.confirmSaveUntitledWorkspace
允许您禁用在关闭包含未命名工作区的窗口时显示确认对话框。对话框上现在也有一个复选框来禁用显示对话框。window.confirmSaveUntitledWorkspace
设置默认情况下处于启用状态,以保持当前行为。
注意:有关未命名工作区的更多信息,请参阅我们的文档。
在输出面板中切换自动换行
输出面板现在支持使用查看:切换自动换行命令来切换自动换行。这对于在输出面板中查看长行文本很有用。
在新的窗口中打开输出面板
输出面板现在在面板标题菜单中有一个在新的窗口中打开输出操作,以便在单独的窗口中查看输出面板。
从 CLI 更新扩展
您现在可以使用--update-extensions
参数从命令行更新扩展。这将把所有已安装的扩展更新到最新版本。
快速选择中的悬停现在使用自定义悬停
我们将快速选择中的几个悬停迁移到使用自定义悬停而不是原生渲染。这允许更丰富的渲染和整个产品中的一致性。
在差异编辑器中查看多个文件
在此版本中,多差异编辑器现在对所有用户启用。多差异编辑器允许您在一个可滚动的视图中查看多个文件中的更改
目前,多差异编辑器可用于审查本地更改、暂存的更改、传入/传出的更改、储藏以及来自拉取请求的更改。可以通过选择各种新的查看更改操作来打开它,这些操作可以通过多文件差异图标识别。
当从源代码管理视图打开差异编辑器时,它会随着文件发生更改或暂存而动态更新视图。
多差异编辑器仍在开发中,因此预计在即将发布的版本中会看到更多改进和错误修复。
GitHub 拉取请求扩展中的多文件差异
当安装GitHub 拉取请求和问题扩展时,您可以设置"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.experimental.variablesView": true
笔记本粘性滚动
笔记本编辑器的粘性滚动功能已得到重大改进,使其样式与其他工作台一致,并为每个 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 语音扩展。
任务
路径分隔符变量的简写
新的${/}
变量可用作现有${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,该语法比以前的语法维护得更积极。
远程开发
The Remote Development extensions, allow you to use a Dev Container, remote machine via SSH or Remote Tunnels, or the Windows Subsystem for Linux (WSL) as a full-featured development environment.
Highlights include
- 在您的用户数据文件夹中创建一个
devcontainer.json
。 - 在使用 Dockerfile 时,在
devcontainer.json
中指定构建选项。
You can learn more about these features in the Remote Development release notes.
对扩展的贡献
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 调试器扩展
The Python Debugger extension is now installed by default alongside the Python extension.
Python 调试器扩展旨在将调试功能与主 Python 扩展分离,以防止兼容性问题。这确保即使 Python 扩展不再支持旧版本的 Python(例如 Python 3.7),您也可以继续调试使用这些版本的项目,而无需降级您的 Python 扩展。它还提供特定于平台的构建,确保您只收到与您的特定操作系统相关的组件,从而减少下载时间和不必要的开销。
此新扩展复制了主 Python 扩展中可用的所有功能,以及更多功能。
要确保您使用的是新的 Python 调试器扩展,请将 launch.json
配置文件中的 "type": "python"
替换为 "type": "debugpy"
。将来,Python 扩展将不再提供调试支持,我们将为所有调试功能将所有调试支持转移到 Python 调试器扩展。
在 Python 解释器快速选择中创建环境选项
您现在可以更方便地从 Python 解释器快速选择中创建 Python 环境。运行 **Python: 选择解释器** 命令,然后选择 **创建环境** 选项以创建项目的新虚拟环境。
主题:Catppuccin Mocha(在 vscode.dev 上预览)
改进工作区 conda 环境的显示
Python 解释器快速选择现在显示位于工作区中的 conda 环境的名称,以便更轻松地识别它们。
支持多级 pytest 类
当使用多级 pytest 类时,现在将在测试资源管理器中显示顶级类。以前,只显示低级类。
主题:Catppuccin 摩卡(在 vscode.dev 上预览)
Jupyter
完成用于扩展作者的 Jupyter 内核执行 API
Jupyter 扩展的 API 用于对 Jupyter 内核执行代码已完成。扩展可以使用该 API 对内核执行代码。
可以在 Jupyter 内核执行示例 中找到 API 使用的示例。
npm 包 @vscode/jupyter-extension
包含所有 TypeScript 类型定义。
当扩展尝试访问 Jupyter 内核时,系统会提示用户授予或撤销对内核的访问权限。用户按扩展授予对 Jupyter 内核的访问权限。这意味着用户可以授予扩展 A
的访问权限,并撤销扩展 B
的访问权限。
用户可以通过命令 Jupyter:管理对 Jupyter 内核的访问权限 来管理(授予/撤销)对每个扩展的 Jupyter 内核的访问权限。
GitHub 拉取请求和问题
对 GitHub 拉取请求和问题 扩展有了更多进展,它允许您处理、创建和管理拉取请求和问题。新功能包括
- 解决当前签出的 PR 的冲突。
- 问题查询的
groupBy
属性。 - 单击签出的 PR 中的永久链接将在编辑器中打开该文件。
- 将鼠标悬停在评论反应上会显示谁做出反应。
- 设置
"githubPullRequests.focusedMode": "multiDiff"
将在签出时使用所有 PR 文件打开多 diff 编辑器。
查看 扩展版本 0.80.0 的更改日志,以了解其他亮点。
预览功能
TypeScript 5.4 Beta 支持
我们现在支持 TypeScript 5.4 的 Beta 版。查看 TypeScript 5.4 Beta 博客文章 和 迭代计划,了解有关此版本的详细信息。亮点包括
- 对 AI 支持的重构的初步工作。
- 一个新的
NoInfer
本征,可以帮助库和类型作者停止不正确的类型推断。 - 对 类型细化 和类型检查的改进。
要开始使用 TypeScript 5.4 Beta,只需安装 TypeScript 夜间版扩展。请分享您的反馈,并告知我们您是否在 TypeScript 5.4 中遇到了任何错误。
快速搜索改进
在版本 1.82 中,我们引入了 快速访问文本搜索(“快速搜索”),它允许用户从选择器中搜索。🔎
快速搜索现在具有以下功能
- 活动选择上的编辑器预览。在您浏览时查看编辑器中的结果。
- 从快速搜索到搜索视图的更轻松导航。选择输入旁边的按钮或结果将结果传输到搜索视图。
主题:夜猫(在 vscode.dev 上预览)
建议的 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 语言服务包 为 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。我们要感谢所有在内部人员版本上自行托管并提供早期反馈的人。
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 - 记录
extensionLocation
而不是location
在getCustomBuiltinExtensionsFromLocations
的错误消息中 PR #200748
- 在
- @Ajaykumbhare (Ajay Kumbhare): fix: 终端重命名在编辑器区域中无法按预期工作 PR #202270
- @andrewbranch (Andrew Branch): 修复 preferTypeOnlyAutoImports 首选项 getter PR #201376
- @aramikuto (Aleksandr Kondrashov): 更新 IExplorerView 接口 PR #201992
- @audreygao (Audrey Ya Gao): 修复 #193468 - 修复在不可展开的引用项上按“l”键时出现错误通知的错误。 PR #199996
- @bricker (Bryan Ricker): 文档排版修复 PR #202429
- @callumok2004 (Callum OKane): 将
bun.lockb
添加到 package.json 下的默认文件嵌套 PR #201065 - @CGNonofr (Loïc Mangeonjean): 考虑之前创建的模型 PR #199652
- @chartrandf (Francis Chartrand): 时间线:使用跟随选项,以便时间线跟随文件,即使文件重命名了 PR #187174
- @conwnet (netcon): 修复:
workbench.editorAssociations
在工作台配置默认值中不起作用 PR #194087 - @cpendery (Chapman Pendery)
- 修复:终端建议定位 PR #199420
- 修复:接受终端补全时的光标位置 PR #199706
- 构建:当 'shellIntegration.suggestEnabled' 为真时启用建议 PR #199821
- 重构:将 xterm 建议插件移到 terminalContrib 中 PR #200107
- @DiscreteTom (DiscreteTom): 修复 #193746 PR #197523
- @effectivecui: 避免在 item.children 为空时进入无限循环。 PR #201701
- @Flanker32 (Hanxiao Liu): 更新 Java 工作空间标签 PR #197729
- @gayanper (Gayan Perera): 添加对断点依赖的支持 PR #166202
- @GenericTSDeveloper: 修复了建议详细信息小部件错位的问题 (https://github.com/microsoft/monaco-editor/issues/3373) PR #198730
- @gjsjohnmurray (John Murray)
- 实现列表查找/过滤匹配项之间的键盘导航 PR #180078
- 在过滤 Git 分支/标签快速选择时保留排序顺序 (修复 #199471) PR #199473
Git: Merge Branch...
选择器在描述中重复分支名称 (修复 #199562) PR #199742- 修复与活动栏相关的
Customize Layout
错误 (修复 #200571) PR #200572
- @gregvanl (Greg Van Liew): 添加缺少的逗号 PR #201137
- @harbin1053020115 (ermin.zem): 修复:在开发模式下根据当前颜色主题选择主题 PR #190035
- @hsfzxjy (Xie Jingyi): 将 onDidStyleChange 推迟到 Repl 可见时 PR #200473
- @iisaduan (Isabel Duan): 修复 typescript/54492:检查文件重命名是否更改了扩展名 PR #200220
- @impressivewebs (Louis Lazaris)
- 修复了一些 CSS 术语 PR #202125
- 更正了 CSS 悬停文档文本 PR #202142
- @irgendwr (Jonas Bögle): 添加:在 Git SCM 菜单中添加“关闭其他存储库” PR #130931
- @jacekkopecky (Jacek Kopecký): 修复 #198566:将左侧截断的搜索预览省略号化 PR #198567
- @jaraco (Jason R. Coombs): 添加对从 xonsh 提取环境的支持。 PR #201036
- @jeanp413 (Jean Pierre)
- 修复 vscode.tasks.executeTask 错误 Unexpected: Task does not exist after task.terminate() PR #200872
- 修复单个选项卡上下文菜单操作有时不起作用 PR #201021
- 修复任务进度指示器在第一次之后未出现 PR #201064
- 修复单个终端选项卡重命名操作不起作用 PR #201128
- @johnsoncodehk (Johnson Chu): 修复 optionalReplacementSpan 未应用于补全项 PR #200945
- @JoyceGu (Joyce Gu): 添加 JS 向量数据库库 PR #199980
- @jtbandes (Jacob Bandes-Storch): 更新 Swift.tmLanguage PR #200698
- @keerthivasansa (Keerthi Vasan S A): 为树模糊搜索切换添加工作台操作 PR #175137
- @khreenberg (Kim Reenberg): 修复:对于不可执行的 libc.so.6,回退到字符串 PR #202581
- @kkocdko (kkocdko): 修复 Node.js 21 之后平台检测 PR #200935
- @ksg97031 (KSG): 文档:修复 Go To 命令的多个参数描述中的拼写错误 PR #201122
- @Leask (Sixia "Leask" Huang): 修复:调整用于调用 ldconfig 的 check-requirements PR #202645
- @loganrosen (Logan Rosen): 更新 CONTRIBUTING.md 中的 Stack Overflow 标签 PR #126199
- @mahmoudsalah1993 (Mahmoud Salah): 对于打开的差异编辑器,解析基础原始编辑器以设置…… PR #201597
- @Malix-off (Malix): 删除
extensions/git/src/api/git.d.ts
中的未使用导入 PR #200797 - @marrej (Marcus Revaj): # 修复部分接受的删除 PR #199663
- @MaxBR97: 添加了 scm.inputMinLines 配置 PR #200551
- @mohammadamin16 (Mohammad Amin): 调试:在调试会话结束时关闭只读选项卡 PR #199898
- @mrienstra (Michael Rienstra): 文档:记录新的
configuration.markdown.copyFiles.destination
选项 PR #203391 - @MrJithil (Jithil P Ponnan): 整理:将已弃用的八进制转义序列替换为十六进制 PR #197518
- @ngarside (Nathan Garside): 为
*.repo
文件添加语法高亮 PR #199859 - @nrayburn-tech (Nicholas Rayburn): npm 扩展 - 在 findFiles 之前检查根 package.json PR #124803
- @poeck (Paul Köck): 整理:更新版权年份 PR #202344
- @r3m0t (Tomer Chachamu): 在粘贴命令中等待粘贴完成 (修复 #196161) PR #196516
- @RedCMD (RedCMD)
- 将小写
l
更改为大写L
。asp-vb-net.tmLanguage.json
PR #201981 onDidChangeEmmiter
在不应该的时候持续触发 PR #202198
- 将小写
- @remcohaszing (Remco Haszing): 删除 bigNumbersDelta PR #194712
- @RobbyCBennett (Robby Bennett): 使 gotoErrorWidget 相关信息的样式与标记悬停参与者更加一致 PR #195409
- @robertohuertasm (Roberto Huertas): feat(stash): 返回存储结果 PR #177732
- @ronakj (Ronak Jain): 修复使用自定义节点路径时 tsserver 崩溃的问题 PR #201966
- @russelldavis (Russell Davis): 修复关闭文件时恢复问题时的竞争条件 PR #183271
- @samhanic: [CLI] 扩展更新命令 PR #199893
- @shubhisroking (Shubh): 用 Cancellation Error 替换已弃用的 canceled。 PR #197605
- @SimonSiefke (Simon Siefke)
- fix: 菜单栏中的内存泄漏 PR #198052
- fix: defaultWorkerFactory 中的内存泄漏 PR #198710
- @sparxooo (sparxooo): 修复 #200257 以及现有的尾部非数字正则表达式修复 PR #200919
- @Splizard (Quentin Quaadgras): 移动/Android:使用笔/触控笔支持文本选择。 PR #198578
- @susiwen8 (susiwen8)
- fix: #200046 PR #200485
- fix:
npm script
中的install
不应该被打开 PR #201082
- @VDisawal: #198975: saveValue => historyNavigator.add PR #199142
- @wenfangdu (Wenfang Du): feat(git): 在语言配置檔案中添加
autoClosingPairs
PR #131403 - @Yesterday17 (Yesterday17): 修复 ExtHostLabelService 拼写错误 PR #198855
- @yiliang114 (易良): fix: fetchUrl 的控制台格式 PR #198909
- @zWingz (zWing): 修复 registerProfileContentHandler 拼写错误 PR #183197
对 vscode-flake8
的贡献
- @maxg203 (Max Goodridge): 修复 README.md 中的链接 PR #269
对 vscode-hexeditor
的贡献
- @IngilizAdam (Hasan Tuna): 在偏移量之间选择 PR #470
对 vscode-languageserver-node
的贡献
- @debonte (Erik De Bonte): 在
workspace/applyEdit
中支持WorkspaceEditMetadata
PR #1390 - @MariaSolOs (Maria José Solano)
- @rroessler (Reuben Roessler): 更改节点客户端的成功退出通知 PR #1404
- @sh-cho (Seonghyeon Cho): 使用 Azure 管道更新构建状态徽章 PR #1392
- @werat (Andy Hippo): 在
unregister()
中始终删除功能提供程序 PR #1380
对 vscode-pull-request-github
的贡献
- @Balastrong (Leonardo Montini): 从 Markdown 模板创建问题 PR #5503
- @joshuaobrien
- @pouyakary (Pouya Kary ✨): 修复 #5620 PR #5621
对 vscode-vsce
的贡献
- @sebas2day (Sebastiaan Brouwer): feat: 支持 yarn 工作空间 PR #493
- @whosafe: 过滤来自其他平台的数据 PR #912
对 language-server-protocol
的贡献
- @alcarney (Alex Carney)
- @asukaminato0721 (Asuka Minato): add-vscoq PR #1869
- @BeardedFish (Darian Benam): 将 Apache Dispatcher Config 添加到语言服务器实现列表中 PR #1875
- @DanTup (Danny Tuppeny): 阐明代码片段转义规则 PR #1868
- @Fomys (Louis Chauvet): 阐明 CompletionItem.textEdit 说明 PR #1722
- @mhanberg (Mitchell Hanberg): 修复 workspace/configuration 中的拼写错误 PR #1823
对 monaco-editor
的贡献
- @kokovtsev (Dmitry Kokovtsev): fix: 在 JSON 完成详细信息中启用 Markdown PR #4210
- @mevisioam: 公开 JSON 工作器 PR #4299
- @nora-soderlund (Nora Söderlund): chore(docs): 修复 monaco.d.ts 链接 PR #4243
- @OfekShilon (Ofek)
- @soof-golan (Soof Golan): feat: 支持 Python 3.12 关键字 PR #4212
- @tamayika: 将 JSON 符号信息更改为文档符号 PR #3894
对 node-jsonc-parser
的贡献
- @H4ad (Vinicius Lourenço): perf(format): 尽可能多地缓存换行符和空格 PR #81