2024 年 5 月(版本 1.90)
更新 1.90.2:此更新解决了这些问题。
更新 1.90.1:此更新解决了这些问题。
下载:Windows:x64 Arm64 | Mac:通用 Intel Apple 芯片 | Linux:deb rpm tarball Arm snap
欢迎来到 Visual Studio Code 2024 年 5 月版本。此版本中有许多我们希望您会喜欢的更新,其中一些主要亮点包括:
- 编辑器选项卡多选 - 同时选择多个选项卡并对其执行操作。
- 配置文件 - 使用您喜欢的配置文件打开新窗口。
- 编辑器操作 - 跨编辑器组即时访问编辑器操作。
- Copilot 可扩展性 - 使用聊天和语言模型 API 将 AI 构建到您的扩展中。
- VS Code 语音 - 使用文本转语音自动朗读 Copilot Chat 响应。
- 在 Notebook 中查找 - 将搜索限制为 Notebook 中选定的单元格。
- 聊天上下文 - 快速将不同类型的上下文附加到聊天中。
- 聊天代码块中的 IntelliSense - 借助 IntelliSense 更好地理解生成的代码。
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新。内部人员版本:想尽快试用新功能?您可以下载每晚的内部人员版本,并在最新更新发布后立即试用。
辅助功能
从辅助功能帮助对话框设置键绑定
辅助功能帮助对话框概述了功能或视图的重要命令。当命令缺少键绑定分配时,您现在可以使用 ⌥K (Windows、Linux Alt+K) 从辅助功能帮助对话框中配置它。
实验性:信号延迟设置
当设置 Debounce position changes
启用时,您可以使用设置 Signal options delays
自定义各种辅助功能信号的去抖动时间。
工作台
编辑器选项卡多选
您现在可以同时选择多个选项卡,从而能够一次对多个编辑器应用操作。此新功能使您能够通过一个操作移动、固定或关闭多个选项卡。要将另一个选项卡添加到选择中,请使用 Ctrl + Click
(macOS 上为 Cmd + Click
)。要选择一系列选项卡,请使用 Shift + Click
。
始终显示编辑器操作
我们引入了 Always Show Editor Actions
设置。当您启用此设置时,每个编辑器组的编辑器标题操作将始终显示,无论编辑器是否处于活动状态。
当设置未启用(默认值)时,编辑器操作仅在编辑器处于活动状态时显示
如果您启用该设置,即使编辑器不处于活动状态,编辑器操作也始终可用
将 disable-lcd-text 设置为运行时参数
使用 disable-lcd-text
,您可以在 Windows 上禁用 RGB 子像素渲染。disable-lcd-text
设置现在在 argv.json
文件中作为运行时参数受支持。以前,它只作为未文档化的 CLI 标志可用。使用首选项:配置运行时参数命令来配置运行时参数。
在下图中,您可以看到并排比较,左侧 disable-lcd-text
为 true
,右侧为 false
。
主题:浅粉色(在 vscode.dev 上预览)
为新窗口配置自定义配置文件
以前,当您打开一个新的 VS Code 窗口时,它会使用活动窗口的配置文件,如果没有活动窗口,则使用默认配置文件。您现在可以通过配置 window.newWindowProfile
设置来指定打开新窗口时应使用的配置文件。
源代码管理
焦点输入/资源组命令
在此里程碑中,我们添加了几个工作台命令,以便您可以为其创建键盘快捷方式
- 聚焦下一个或上一个源代码控制输入字段:
workbench.scm.action.focusNextInput
,workbench.scm.action.focusPreviousInput
- 聚焦仓库中的下一个或上一个资源组:
workbench.scm.action.focusNextResourceGroup
,workbench.scm.action.focusPreviousResourceGroup
Notebooks
在单元格选择中查找
当您在 Notebook 中时,您现在可以使用“查找”控件在选定单元格的特定范围内进行搜索。
在将 notebook.experimental.find.scope.enabled
设置为 true
后,“查找在单元格选择中”切换按钮将在“查找”控件中可用。然后,您可以选择一系列单元格并打开“查找”控件,或者如果它已打开,则选择“查找在单元格选择中”按钮。
Notebook 格式代码操作
Notebook 现在支持一种新型的代码操作,它以 notebook.format
代码操作类型前缀定义。这些代码操作可以通过明确的格式化请求(使用命令Notebook:格式化 Notebook)或保存时格式化请求自动触发。
它们可以通过使用工作区编辑和 Notebook 编辑来提供更强大的格式化功能。要开始使用,请查看 vscode-extension-samples 仓库中的示例扩展。
终端
⚠️ 移除 canvas 渲染器
canvas 渲染器在 VS Code 1.89 版本中已弃用,现在已完全移除。这意味着在少数不支持 WebGL2 的机器上,终端现在使用基于 DOM 的渲染器。您可以在终端文档中了解有关 GPU 加速的更多信息。
终端中重缩放重叠字形
设置 terminal.integrated.rescaleOverlappingGlyphs
在 VS Code 1.88 版本中作为预览功能引入,现在已默认启用。此功能会重缩放与旨在覆盖模糊宽度字符的后续单元格重叠的字形,这些字形的字体字形可能与后端 pty/unicode 版本所认为的不匹配。
例如,在大多数字体中,罗马数字 Unicode 字符(U+2160+
)通常占用多个单元格,因此当此设置启用时,它们会水平重缩放。
不重缩放
重缩放
对扩展的贡献
GitHub Copilot
将上下文附加到聊天
为了使您的聊天提示更具体,您可以将上下文添加到聊天消息中。您现在可以将更多类型的上下文附加到聊天消息中,例如工作区符号。以前,您使用“#”符号来引用文件或当前选择。现在,您可以通过在聊天视图输入字段中选择 📎 图标,或通过键入 ⌘/ (Windows、Linux Ctrl+/) 将上下文附加到聊天消息。
提示:使用右箭头键在背景中快速附加上下文,同时保持上下文选择器打开。当您在编辑器中时,您还可以右键单击选择并选择Copilot > 添加选择到聊天。
使用必应搜索和企业知识库提问
VS Code 中的 GitHub Copilot Enterprise 用户现在可以提出问题,这些问题会通过网络结果和您企业的知识库的上下文进行丰富。要试用此功能,请安装 Copilot Chat 的最新预发布版本。
在“聊天”视图中,您可以提出类似 @github Node.js 的最新 LTS 是什么? #web
的问题,以利用网络搜索。Copilot 引用的任何搜索结果都显示在聊天响应的 Used References
部分中。
您还可以直接从 VS Code 询问有关您企业的知识库的问题,这些知识库是包含文档的 Markdown 仓库集合。只需键入 @github #kb
即可从可用的知识库中进行选择。同样,Copilot 引用的任何知识库片段都显示在聊天响应的 Used References
部分中。
这使得 Copilot Enterprise 用户可以通过使用现有聊天变量(例如 #file
和 #selection
)将搜索结果和内部文档与编辑器上下文结合起来。请尝试一下,并在 https://github.com/microsoft/vscode-copilot-release/ 上向我们分享您的反馈!
聊天代码块中的 IntelliSense
我们现在支持 Copilot 生成的代码块中的基本 IntelliSense。这使您可以使用许多与您在编辑器中可能已经使用的相同的 IntelliSense 工具,并可以帮助您更好地理解生成的代码。
支持的 IntelliSense 功能包括
- 通过使用 ctrl click / cmd click 或 F12 跳转到定义
- 悬停
- 跳转到实现
- 跳转到类型定义
IntelliSense 甚至可以与 @workspace
一起使用,以了解 Copilot 响应中使用的任何工作区符号。
TypeScript、JavaScript、HTML 和 CSS 代码块的 IntelliSense 是开箱即用的。对于其他语言支持,请尝试为该语言安装扩展,尽管并非所有语言扩展都已支持代码块 IntelliSense。请为尚未支持此功能的任何语言提交功能请求。
改进的聊天响应链接
我们通过添加文件名和符号的链接改进了聊天响应。通过选择这些链接,您可以在编辑器中导航到相应的文件或符号。
在行内聊天和聊天视图之间漫游活动聊天
您现在可以将已完成或仍处于活动状态的聊天请求从行内聊天移动到聊天视图。您可以使用此功能来清理行内聊天并将对话移动到更持久的位置。要移动请求,请选择聊天输入框旁边的聊天图标。
自动重命名建议
如果您使用 Copilot Chat 扩展,当您重命名符号时,由 Copilot 提供支持的重命名建议现在会自动触发。您可以通过使用设置 github.copilot.renameSuggestions.triggerAutomatically
来关闭此功能。
Python
测试 Bug 修复
使用 Python 测试重写时,pytest 的体验已得到改进,以更好地支持在 pytest 的 cwd 与 VS Code 工作区根目录相邻时设置它,以及在函数名称在类之间重复时在测试资源管理器上显示参数化测试。
此外,我们通过将系统配置脚本路径添加到 PATH 来减少了一些测试发现失败场景,从而为测试执行启用 shell。
实验性:带 Intellisense 和语法高亮的 Python 原生 REPL
您现在可以在类似编辑器的 REPL 环境中运行您的 Python 代码,该环境配备了 Intellisense 和语法高亮等功能,使与 REPL 的交互更加高效。要启用此功能,请在您的 settings.json
文件中设置 "python.REPL.sendToNativeREPL": true
。这将在 Shift+Enter 和运行选择/行时在 Python 原生 REPL 中执行代码。
您可以通过在 settings.json
中设置 "python.REPL.sendToNativeREPL": false
来选择使用终端中的 Python REPL(>>>)。此外,如果您在 settings.json
中添加设置 "interactiveWindow.executeWithShiftEnter": false
,Python 原生 REPL 将在 Enter 键上智能执行,类似于 Python 的原始交互式解释器。
GitHub 拉取请求和问题
用于处理、创建和管理拉取请求和问题的 GitHub Pull Requests 扩展取得了更多进展。查看该扩展 0.90.0 版本的更新日志,了解其他亮点。
VS Code 语音
我们为 VS Code 语音扩展添加了文本转语音功能支持。可以启用新的设置 accessibility.voice.autoSynthesize
,以便在语音也用作输入时自动朗读 Copilot Chat 响应。
请注意,输入字段中的麦克风图标会发生变化,表示正在朗读文本。要中断合成,请选择该图标或按 Escape。
每个聊天响应还会显示一个新的扬声器图标,以便您可以选择性地朗读响应
您可以通过现有的 accessibility.voice.speechLanguage
设置更改用于文本转语音的语言。
预览功能
PowerShell 的 VS Code 原生 IntelliSense
除了多项可靠性改进外,我们还对终端中的 PowerShell IntelliSense 进行了以下更改
terminal.integrated.shellIntegration.suggestEnabled
已更改为terminal.integrated.suggest.enabled
- 新的
terminal.integrated.suggest.quickSuggestions
控制在键入空格后是否显示建议 - 新的
terminal.integrated.suggest.suggestOnTriggerCharacters
控制在键入/
、\
或-
时是否显示建议
TypeScript 5.5
我们继续改进对即将发布的 TypeScript 5.5 版本的支持。有关此版本的详细信息,请查看 TypeScript 5.5 Beta 博客文章和迭代计划。
要开始使用 TypeScript 5.5 beta,请安装 TypeScript Nightly 扩展。请分享反馈,并告诉我们您是否遇到 TypeScript 5.5 的任何 Bug。
Web 版问题报告器
我们改进了 VS Code Web 版的问题报告流程,使其与用户目前在桌面版上的体验相匹配。选择帮助:报告问题会在新窗口中打开问题报告页面,用户可以在其中选择 Bug 类型、来源和必要的扩展。扩展信息、系统信息等会自动附加到 GitHub 中创建的问题。
此功能在此版本中目前默认禁用,但请通过开启 issueReporter.experimental.webReporter
设置来分享您的反馈。
扩展创作
为扩展使用 esbuild
用于 TypeScript
和 Web
的 yo code
扩展生成器现在可以选择使用 esbuild
作为打包器。当您选择 esbuild
时,这将创建一个 esbuild.js
构建脚本,并在 package.json
中添加脚本条目,在 .vscode/tasks.json
中添加构建任务。
要在现有扩展中使用 esbuild
,请查看打包扩展和Web 扩展指南。
您可以在 vscode-extension-samples/esbuild-sample 找到一个示例项目。
聊天和语言模型 API
我们已最终确定了使扩展能够参与聊天和访问语言模型的 API。有关更多信息,请参阅扩展示例和聊天扩展文档页面,或观看我们在 Microsoft Build 大会上发表的通过 GitHub Copilot 增强 VS Code 扩展的演讲。
重要:这些 API 已最终确定,但目前仅在 VS Code Insiders 中可用。
聊天参与者
聊天参与者 API 允许扩展通过聊天参与者来扩展 GitHub Copilot Chat,可以在聊天输入字段中使用 @
调用该参与者。参与者可以回复用户的请求,其中包含 Markdown、文件树、运行 VS Code 命令的按钮或其他类型的内容。
语言模型
语言模型 API 允许访问 Copilot 的聊天模型,例如 gpt-3.5 和 gpt-4。此 API 可用于聊天参与者,也可用于丰富其他功能。该 API 围绕 LanguageModelChat
对象构建,这些对象用于聊天请求和计算令牌。
访问聊天对象的唯一方法是 vscode.lm.selectChatModels
函数。该函数接受一个选择器来缩小聊天模型的不同属性范围,例如按供应商、系列、版本或标识符。这些值相对自由形式,必须在提供它们的扩展文档中查找。目前,只有 Copilot Chat 扩展贡献聊天模型。它使用 copilot
供应商,当前系列是 gpt-3.5-turbo
和 gpt-4
,但可能会发生变化。
此代码片段展示了如何从 copilot
供应商中选择所有聊天模型
const models = await vscode.lm.selectChatModels({
vendor: 'copilot'
});
if (models.length === 0) {
// no models available
return;
}
调用 selectChatModels
时有两点非常重要
- 如果没有可用模型,该函数将返回一个空数组,扩展必须处理这种情况。
- Copilot 的聊天模型需要用户同意后才能被扩展使用。同意是以身份验证对话框的形式实现的。因此,
selectChatModels
应该作为用户启动的操作(例如命令)的一部分调用,而不是“突然”调用。
获得聊天对象后,扩展现在可以使用它发送聊天请求。以下代码片段展示了如何发送聊天请求并处理响应流。
// take the first model and say "Hello"
const [chat] = models;
const messages = [vscode.LanguageModelChatMessage.User('Hello')];
const response = await chat.sendRequest(messages);
// the response is always an async iterable that can be consumed with for-await
for await (const part of response.text) {
console.log(part);
}
这就是语言模型 API 的要点。有关更完整的示例,请参阅扩展示例。请继续关注更多示例、文档和 API 的进一步扩展。
用于 VS Code 的 Java 扩展已经在使用语言模型 API,为您的 Java 代码提供基于 Copilot 的重写功能。在Visual Studio Code 中的 Java 2024 年 5 月更新博客文章中了解有关这些更新的更多信息。
@vscode/prompt-tsx
库
为了帮助开发适用于 VS Code 的 GitHub Copilot 扩展,我们开发并发布了一个基于 TSX 的库,用于声明复杂的提示并将其转换为聊天消息,受限于您的 LLM 的上下文窗口限制。在开发此库时,我们从 Anysphere 的 priompt
库中汲取了灵感。如果您是计划使用聊天和语言模型 API 的扩展作者,请考虑试用此库的最新 alpha 版本:@vscode/prompt-tsx。
通过 GitHub 应用扩展 GitHub Copilot
还可以通过贡献 GitHub 应用来扩展 GitHub Copilot。此 GitHub 应用可以在“聊天”视图中贡献一个聊天参与者,您可以使用 @
调用该参与者。GitHub 应用由服务支持,并适用于所有 GitHub Copilot 界面,例如 github.com、Visual Studio 或 VS Code。GitHub 应用无法完全访问 VS Code API。要通过 GitHub 应用扩展 GitHub Copilot,您应该加入 Copilot 合作伙伴计划。您可以观看我们在 Microsoft Build 大会上发表的扩展 GitHub Copilot 演讲,了解更多信息。
调试堆栈焦点 API
VS Code 现在通过新的 API 公开调试视图中聚焦的堆栈帧和线程。vscode.debug.activeStackItem
检索当前聚焦的堆栈项(线程或堆栈帧),而 vscode.debug.onDidChangeActiveStackItem
是当其更改时触发的事件。
这与扩展 VS Code 调试功能的 API(例如使用 DebugAdapterTracker
的 API)结合使用非常有用。了解有关创建调试器扩展的更多信息。
TestRunRequest.preserveFocus
API
以前,由扩展触发的测试运行永远不会像 UI 触发的运行那样将焦点移动到测试结果视图。此行为现在可以通过一个 preserveFocus
标志进行配置,该标志可在创建 TestRunRequest
时设置。此标志默认为 true
以保持向后兼容性。
提议的 API
可归因的测试覆盖率
我们正在开发一个 API,该 API 能够按测试归因测试覆盖率。这使用户能够查看哪些测试运行了哪些代码,过滤编辑器中显示的代码覆盖率以及测试覆盖率视图中的代码覆盖率。有关更多信息和更新,请查看vscode#212196。
悬停详细级别
上一个里程碑提出了一个新 API,用于提供可增加或减少详细程度的悬停。此里程碑中,API 已更改,HoverVerbosityRequest
使用 verbosityDelta
来指示悬停详细程度的相对增加或减少。以前,HoverVerbosityRequest
使用枚举 HoverVerbosityAction
来指示详细程度是增加还是减少。
工程
跟踪启动时的内存效率
我们每天都会在 Windows、macOS 和 Linux 上衡量 VS Code Insiders 的启动性能。我们主要关注的是打开文本文件前的启动速度。
本月我们添加了另一个我们计划改进的指标,以使启动更快:我们消耗了多少内存,以及其中有多少内存最终被 V8 垃圾回收。如果能降低这个数字,启动时间受 V8 垃圾回收运行的影响就会更小。
Electron 29 更新
在此里程碑中,我们将 Electron 29 更新推广给我们的稳定版本用户。此更新附带 Chromium 122.0.6261.156 和 Node.js 20.9.0。我们要感谢所有在 Insiders 构建上自托管并提供早期反馈的人。
值得注意的修复
- 212386 本地历史记录:不保留以前删除文件的条目
- 213645 辅助窗口在 Firefox 中无法正常工作
- vscode-js-debug#2000/2002 JavaScript 调试器更快,尤其是在处理源映射重命名时
感谢
最后但同样重要的是,衷心感谢 VS Code 的贡献者。
问题跟踪
对我们问题跟踪的贡献
- @gjsjohnmurray (John Murray)
- @IllusionMH (Andrii Dieiev)
- @RedCMD (RedCMD)
- @starball5 (starball)
- @ArturoDent (ArturoDent)
拉取请求
对 vscode
的贡献
- @BrunoSoaresEngineering: feat(markdown-language-features): #208398 add avif as image extension PR #212547
- @bsShoham (Shoham Ben Shitrit): remove global enablement message PR #213128
- @CharlesHGong (Hanning Gong (Charles)): Fix an issue where defaultLinesDiffComputer does not pass in the timeout variable PR #213035
- @cpendery (Chapman Pendery): refactor: support dynamic terminal prompt detection without regex on windows PR #211382
- @DatN99 (Dat Nguyen): Added setting for notebook cell markdown lineheight PR #212531
- @gjsjohnmurray (John Murray)
- Make codelenses work after switching from webview editor (fix #198309) PR #211999
- Revive
TimelineChangeEvent.uri
if passed inTimelineProvider.onDidChange
event PR #212927
- @kdy1 (Donny/강동윤): feat: Use official json schema for SWC PR #212158
- @mahmoudsalah1993 (Mahmoud Salah): Fire onDidRegisterAllSupported executions if any execution type is re… PR #212163
- @Maximetinu (Miguel Medina Ballesteros): Add
AccessibilitySignal.terminalCommandSucceeded
andsuccess.mp3
(issue #178989) PR #204430 - @OccasionalDebugger
- Respect stackframe deemphasize in getTopStackFrame PR #211855
- Pass full function breakpoint options from plugin PR #211895
- @pouyakary (Pouya Kary ✨): Feat: Bolder Typeface + Configurable Letter Spacing for Minimap's Section Header Labels ✨ PR #209990
- @sean-mcmanus (Sean McManus): Add /** */ to cpp/language-configurations.json PR #211202
- @SimonSiefke (Simon Siefke)
- fix: dispose template data disposables in source column renderer PR #202618
- feature: enable typescript isolated modules PR #212913
- Add editor.findMatchForeground PR #213497
- fix wrong colors when editor findMatchForeground is not defined PR #213686
- @walkerdb (Walker Boyle): fix: tsserver no longer crashes when log path includes spaces PR #212752
- @wenfangdu (Wenfang Du): Add 'git-rebase-todo' to COMMON_FILES_FILTER in WorkspacesHistoryMainService PR #211614
- @Yesterday17 (Yesterday17): fix: remove temp dir if extension is installed by another source PR #213379
对 vscode-eslint
的贡献
- @sapegin (Artem Sapegin): feat: Allow eslint.rules.customizations to target all fixable rules PR #1841
对 vscode-extension-samples
的贡献
- @moushicheng (某时橙): fix: lsp-embedded-language-serviceadd add activationEvents to invoke client PR #936
对 vscode-generator-code
的贡献
- @1chooo (Hugo ChunHo Lin): Remove Unnecessary Spaces in
ext-command-ts/vsc-extension-quickstart.md
PR #467 - @k35o (k8o): convert spaces to tabs in files in
vscode
folder ontemplates
folder PR #458
对 vscode-hexeditor
的贡献
- @lorsanta (Lorenzo Santangelo): add copy selection as different formats and paste hexstring support PR #498
- @tomilho (Tomás Silva): Add copyOffsetAsHex/Dec PR #521
对 vscode-languageserver-node
的贡献
- @hyangah (Hyang-Ah Hana Kim): Add SemanticTokenTypes.label PR #1423
- @imbant (imbant): fix “Semantic tokens that are not in ascending order will not be highlighted” PR #1467
- @rchiodo (Rich Chiodo): Support pulling diagnostics for notebooks too PR #1465
对 vscode-mypy
的贡献
- @hamirmahal (Hamir Mahal): fix: deprecated document getting usage PR #302
对 vscode-remote-try-dotnet
的贡献
- @cmaneu (Christopher MANEU): Migrate demo app to .NET 6 PR #31
对 language-server-protocol
的贡献
- @asukaminato0721 (Asuka Minato): add-make-lsp PR #1941
- @fbricon (Fred Bricon): Add LSP4IJ client to tools.md PR #1940
- @macnetic (Magnus Oksbøl Therkelsen): Add Verible language server for SystemVerilog PR #1929
- @ssbarnea (Sorin Sbarnea): Correct link to Ansible Language Server PR #1930
- @wiremoons (Simon Rowe): Update servers.md - add OLS for Odin language PR #1931
- @ybiquitous (Masafumi Koba): Add LanguageServer::Protocol in Ruby to SDKs PR #1937
对 monaco-editor
的贡献
- @htcfreek (Heiko): Add extension to
csp.contribution.ts
PR #4504 - @jakebailey (Jake Bailey): Call clearFiles on internal EmitOutput diagnostics, pass args down PR #4482
- @johnyanarella (John Yanarella): Update TypeScript to TS 5.4.5 in all projects, vendored files PR #4305
- @samstrohkorbatt: Adding Python f-string syntax support PR #4401