2024 年 5 月(版本 1.90)
更新 1.90.2:此更新解决了这些 问题。
更新 1.90.1:此更新解决了这些 问题。
下载:Windows:x64 Arm64 | Mac:通用 Intel silicon | Linux:deb rpm tarball Arm snap
欢迎使用 Visual Studio Code 2024 年 5 月版。此版本包含许多更新,我们希望您会喜欢,其中一些主要亮点包括
- 编辑器标签多选 - 同时选择多个标签并对其执行操作。
- 配置文件 - 使用您首选的配置文件打开新窗口。
- 编辑器操作 - 立即访问跨编辑器组的编辑器操作。
- Copilot 扩展性 - 使用 Chat 和 Language Model API 将 AI 构建到您的扩展中。
- VS Code 语音 - 使用文本到语音自动朗读 Copilot Chat 响应。
- 在笔记本中查找 - 将搜索限制在笔记本中选定的单元格。
- 聊天上下文 - 在聊天中快速附加不同类型的上下文。
- 聊天响应中的 IntelliSense - 通过 IntelliSense 更好地理解生成的代码。
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新。Insiders: 想要尽快试用新功能吗?您可以下载每晚构建的 Insiders 版本,并在最新更新可用时立即试用。
辅助功能
从辅助功能帮助对话框设置按键绑定
辅助功能帮助对话框为您提供了功能或视图的重要命令概览。当命令缺少按键绑定分配时,您现在可以使用 ⌥K (Windows, Linux Alt+K) 从辅助功能帮助对话框中配置它。
实验性功能:信号延迟设置
当启用设置 Debounce position changes
时,您可以使用设置 Signal options delays
来自定义各种辅助功能信号的防抖时间。
工作台
编辑器标签多选
您现在可以同时选择多个标签,从而能够一次将操作应用于多个编辑器。这项新功能使您能够通过一次操作移动、固定或关闭多个标签。要将另一个标签添加到您的选择中,请使用 Ctrl + 单击
(macOS 上为 Cmd + 单击
)。要选择一系列标签,请使用 Shift + 单击
。
始终显示编辑器操作
我们正在引入 Always Show Editor Actions
设置。当您启用此设置时,每个编辑器组的编辑器标题操作将始终显示,无论编辑器是否处于活动状态。
当未启用该设置(默认值)时,编辑器操作仅在编辑器处于活动状态时显示
如果您启用该设置,编辑器操作将始终可用,即使编辑器未处于活动状态也是如此
将 disable-lcd-text 设置为运行时参数
使用 disable-lcd-text
,您可以禁用 Windows 上的 RGB 子像素渲染。disable-lcd-text
设置现在作为 argv.json
文件中的运行时参数受支持。以前,它仅作为未记录的 CLI 标志可用。使用首选项:配置运行时参数命令来配置运行时参数。
在下图中,您可以看到并排比较,其中左侧 disable-lcd-text
为 true
,右侧为 false
。
主题:Light Pink(在 vscode.dev 上预览)
为新窗口配置自定义配置文件
以前,当您打开新的 VS Code 窗口时,它会使用活动窗口的 配置文件,或者在没有活动窗口的情况下使用默认配置文件。您现在可以通过配置 window.newWindowProfile
设置来指定打开新窗口时应使用的配置文件。
源代码管理
聚焦输入/资源组命令
在此里程碑中,我们添加了几个工作台命令,以便您可以为它们创建键盘快捷键
- 聚焦下一个或上一个源代码管理输入字段:
workbench.scm.action.focusNextInput
、workbench.scm.action.focusPreviousInput
- 聚焦存储库中的下一个或上一个资源组:
workbench.scm.action.focusNextResourceGroup
、workbench.scm.action.focusPreviousResourceGroup
笔记本
在单元格选择中查找
当您在笔记本中时,您现在可以使用查找控件在选定单元格的特定范围内搜索。
在您将 notebook.experimental.find.scope.enabled
设置为 true
后,在单元格选择中查找切换按钮将在查找控件中可用。然后,您可以选择一系列单元格,然后打开查找控件,或者如果它已打开,则选择“在单元格选择中查找”按钮。
笔记本格式化代码操作
笔记本现在支持一种新的代码操作类型,该类型使用 notebook.format
代码操作类型前缀定义。这些代码操作可以通过显式格式化请求(使用命令笔记本:格式化笔记本)或保存时格式化请求自动触发。
这些可以用于提供更强大的格式化,通过使用工作区编辑和笔记本编辑。要开始使用,请查看 vscode-extension-samples 存储库中的示例扩展。
终端
⚠️ 移除 canvas 渲染器
canvas 渲染器在 VS Code 1.89 版本中已弃用,现在已完全移除。这意味着在少量不支持 WebGL2 的机器上,终端现在使用基于 DOM 的渲染器。您可以在终端文档中阅读有关 GPU 加速的更多信息。
在终端中重新缩放重叠字形
在 VS Code 1.88 版本中作为预览功能引入的设置 terminal.integrated.rescaleOverlappingGlyphs
现在默认启用。此功能重新缩放与后续单元格重叠的字形,这些单元格旨在覆盖二义性宽度的字符,并且可能具有字体字形,这些字形与后备 pty/unicode 版本认为的字形不匹配。
例如,在大多数字体中,罗马数字 unicode 字符 (U+2160+
) 通常占用多个单元格,因此启用此设置后,它们会水平重新缩放。
不重新缩放
重新缩放
扩展贡献
GitHub Copilot
将上下文附加到聊天
为了使您的聊天提示更具体,您可以向您的聊天消息添加上下文。您现在可以将更多类型的上下文附加到聊天消息,例如工作区符号。以前,您使用“#”符号来引用文件或当前选择。现在,您可以通过选择聊天视图输入字段中的 📎 图标,或键入 ⌘/ (Windows, Linux Ctrl+/) 来将上下文附加到聊天消息。
提示:使用向右箭头键在后台快速附加上下文,同时保持上下文选择器打开。当您在编辑器中时,您也可以右键单击所选内容,然后选择Copilot > 将选择添加到聊天。
使用 Bing 搜索和企业知识库提问
VS Code 中的 GitHub Copilot Enterprise 用户现在可以提出问题,这些问题通过 Web 结果和您企业的 知识库 中的上下文进行丰富。要试用此功能,请安装最新预发布版本的 Copilot Chat。
在聊天视图中,您可以提出诸如 @github Node.js 的最新 LTS 是什么?#web
之类的问题,以利用 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 单击 / cmd 单击 或 F12 转到定义
- 悬停
- 转到实现
- 转到类型定义
IntelliSense 甚至可以与 @workspace
一起使用,以了解 Copilot 响应中使用的任何工作区符号。
TypeScript、JavaScript、HTML 和 CSS 代码块的 IntelliSense 开箱即用。对于其他语言支持,请尝试安装该语言的扩展,尽管并非每个语言扩展都已支持代码块 IntelliSense。请为您尚不支持的任何语言提交功能请求。
改进了聊天响应中的链接
我们通过添加文件名和符号的链接改进了聊天响应。通过选择这些链接,您可以导航到编辑器中的相应文件或符号。
在内联聊天和聊天视图之间漫游活动聊天
您现在可以将已完成或仍在活动状态的聊天请求从内联聊天移动到聊天视图。您可以使用此功能来清理内联聊天并将对话移动到更持久的位置。要移动请求,请选择聊天输入框旁边的聊天图标。
自动重命名建议
如果您使用 Copilot Chat 扩展,则当您重命名符号时,由 Copilot 驱动的重命名建议现在会自动触发。您可以使用设置 github.copilot.renameSuggestions.triggerAutomatically
关闭此功能。
Python
测试错误修复
当使用 Python Testing Rewrite 时,pytest 的体验得到了改进,以便在 pytest 的 cwd 与 VS Code 工作区根目录相邻时提供更好的支持,并在跨类重复函数名称时在测试资源管理器上显示参数化测试。
此外,我们通过将系统配置脚本路径添加到 PATH 以启用 shell 进行测试执行,减少了一些测试发现失败的情况。
实验性功能:带有 Intellisense 和语法高亮的 Python Native REPL
您现在可以在类似编辑器的 REPL 环境中运行 Python 代码,该环境配备了诸如 Intellisense 和语法高亮等功能,以提高与 REPL 交互的效率。要启用此功能,请在您的 settings.json
文件中设置 "python.REPL.sendToNativeREPL": true
。这将在 Shift+Enter 和运行选择/行上在 Python Native REPL 中执行代码。
您可以通过在您的 settings.json
中设置 "python.REPL.sendToNativeREPL": false
来选择使用终端内 Python REPL ( >>> )。此外,如果您在您的 settings.json
中添加设置 "interactiveWindow.executeWithShiftEnter": false
,则 Python Native REPL 将像 Python 的原始交互式解释器一样,智能地在 Enter 上执行。
GitHub Pull Requests and Issues
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 的错误。
Web 版问题报告器
我们改进了 Web 版 VS Code 中的问题报告流程,使其与用户当前在桌面版上的体验相匹配。选择帮助:报告问题会在新窗口中打开问题报告器页面,用户可以在其中选择错误类型、来源和扩展(如果需要)。扩展信息、系统信息等会自动附加到在 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 中找到示例项目。
Chat 和 Language Model API
我们已经最终确定了 API,这些 API 使扩展能够参与聊天并访问语言模型。有关更多信息,请参阅 扩展示例和 聊天扩展文档页面,或观看我们在 Microsoft Build 会议上发表的 使用 GitHub Copilot 增强 VS Code 扩展 演讲。
重要提示:这些 API 已最终确定,但目前仅在 VS Code Insiders 中可用。
聊天参与者
聊天参与者 API 使扩展能够使用聊天参与者扩展 GitHub Copilot Chat,该参与者可以使用 @
在聊天输入字段中调用。参与者可以使用 Markdown、文件树、运行 VS Code 命令的按钮或其他类型的内容回复用户请求。
语言模型
Language Model 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 扩展已经在使用 Language Model 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 Apps 扩展 GitHub Copilot
也可以通过贡献 GitHub App 来扩展 GitHub Copilot。此 GitHub App 可以在聊天视图中贡献一个聊天参与者,您可以使用 @
调用该参与者。GitHub App 由服务支持,并且可以在所有 GitHub Copilot 表面上工作,例如 github.com、Visual Studio 或 VS Code。GitHub Apps 没有对 VS Code API 的完全访问权限。要通过 GitHub App 扩展 GitHub Copilot,您应该加入 Copilot 合作伙伴计划。您可以通过观看我们在 Microsoft Build 会议上发表的 扩展 GitHub Copilot 演讲来了解更多信息。
Debug Stack Focus API
VS Code 现在通过新的 API 公开 Debug 视图中聚焦的堆栈帧和线程。vscode.debug.activeStackItem
检索当前聚焦的堆栈项(线程或堆栈帧),vscode.debug.onDidChangeActiveStackItem
是在该项更改时触发的事件。
这与扩展 VS Code 调试功能的 API 结合使用非常有用,例如使用 DebugAdapterTracker
的 API。了解有关创建调试器扩展的更多信息。
TestRunRequest.preserveFocus API
以前,由扩展触发的测试运行永远不会以与 UI 启动的运行相同的方式将焦点移动到测试结果视图中。此行为现在可以通过在创建 TestRunRequest
时设置的 preserveFocus
标志进行配置。此标志默认为 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 Aux 窗口在 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 添加 avif 作为图像扩展 PR #212547
- @bsShoham (Shoham Ben Shitrit): 移除全局启用消息 PR #213128
- @CharlesHGong (Hanning Gong (Charles)): 修复 defaultLinesDiffComputer 不传递超时变量的问题 PR #213035
- @cpendery (Chapman Pendery): refactor: 支持动态终端提示检测,无需在 Windows 上使用正则表达式 PR #211382
- @DatN99 (Dat Nguyen): 为笔记本单元格 Markdown 行高添加设置 PR #212531
- @gjsjohnmurray (John Murray)
- 使代码镜头在从 Webview 编辑器切换后工作(修复 #198309) PR #211999
- 如果传入
TimelineProvider.onDidChange
事件,则恢复TimelineChangeEvent.uri
PR #212927
- @kdy1 (Donny/강동윤): feat: 为 SWC 使用官方 JSON 模式 PR #212158
- @mahmoudsalah1993 (Mahmoud Salah): 如果任何执行类型被重新注册,则触发 onDidRegisterAllSupported 执行 PR #212163
- @Maximetinu (Miguel Medina Ballesteros): 添加
AccessibilitySignal.terminalCommandSucceeded
和success.mp3
(问题 #178989) PR #204430 - @OccasionalDebugger
- 在 getTopStackFrame 中尊重堆栈帧弱化显示 PR #211855
- 从插件传递完整的功能断点选项 PR #211895
- @pouyakary (Pouya Kary ✨): 功能:更粗的字体 + 迷你地图章节标题标签的可配置字母间距 ✨ PR #209990
- @sean-mcmanus (Sean McManus): 将 /** */ 添加到 cpp/language-configurations.json PR #211202
- @SimonSiefke (Simon Siefke)
- 修复:在源列渲染器中处理模板数据 disposables PR #202618
- 功能:启用 typescript 隔离模块 PR #212913
- 添加 editor.findMatchForeground PR #213497
- 修复当 editor findMatchForeground 未定义时颜色错误的问题 PR #213686
- @walkerdb (Walker Boyle): 修复:当日志路径包含空格时 tsserver 不再崩溃 PR #212752
- @wenfangdu (Wenfang Du): 在 WorkspacesHistoryMainService 中将 'git-rebase-todo' 添加到 COMMON_FILES_FILTER PR #211614
- @Yesterday17 (Yesterday17): 修复:如果扩展程序由其他来源安装,则删除临时目录 PR #213379
对 vscode-eslint
的贡献
- @sapegin (Artem Sapegin): 功能:允许 eslint.rules.customizations 定位所有可修复的规则 PR #1841
对 vscode-extension-samples
的贡献
- @moushicheng (某时橙): 修复:lsp-embedded-language-serviceadd 添加 activationEvents 以调用客户端 PR #936
对 vscode-generator-code
的贡献
- @1chooo (Hugo ChunHo Lin): 删除
ext-command-ts/vsc-extension-quickstart.md
中不必要的空格 PR #467 - @k35o (k8o): 在
templates
文件夹的vscode
文件夹中的文件中将空格转换为制表符 PR #458
对 vscode-hexeditor
的贡献
- @lorsanta (Lorenzo Santangelo): 添加将选定内容复制为不同格式和粘贴十六进制字符串的支持 PR #498
- @tomilho (Tomás Silva): 添加 copyOffsetAsHex/Dec PR #521
对 vscode-languageserver-node
的贡献
- @hyangah (Hyang-Ah Hana Kim): 添加 SemanticTokenTypes.label PR #1423
- @imbant (imbant): 修复 “语义标记未按升序排列将不会被突出显示” 的问题 PR #1467
- @rchiodo (Rich Chiodo): 支持为笔记本拉取诊断信息 PR #1465
对 vscode-mypy
的贡献
- @hamirmahal (Hamir Mahal): 修复:已弃用的文档获取用法 PR #302
对 vscode-remote-try-dotnet
的贡献
- @cmaneu (Christopher MANEU): 将演示应用程序迁移到 .NET 6 PR #31
对 language-server-protocol
的贡献
- @asukaminato0721 (Asuka Minato): add-make-lsp PR #1941
- @fbricon (Fred Bricon): 将 LSP4IJ 客户端添加到 tools.md PR #1940
- @macnetic (Magnus Oksbøl Therkelsen): 添加 SystemVerilog 的 Verible 语言服务器 PR #1929
- @ssbarnea (Sorin Sbarnea): 更正 Ansible Language Server 的链接 PR #1930
- @wiremoons (Simon Rowe): 更新 servers.md - 为 Odin 语言添加 OLS PR #1931
- @ybiquitous (Masafumi Koba): 将 Ruby 中的 LanguageServer::Protocol 添加到 SDK PR #1937
对 monaco-editor
的贡献
- @htcfreek (Heiko): 将扩展添加到
csp.contribution.ts
PR #4504 - @jakebailey (Jake Bailey): 在内部 EmitOutput 诊断中调用 clearFiles,向下传递参数 PR #4482
- @johnyanarella (John Yanarella): 在所有项目和供应商文件中将 TypeScript 更新到 TS 5.4.5 PR #4305
- @samstrohkorbatt: 添加 Python f-string 语法支持 PR #4401