2024年5月(版本1.90)
更新 1.90.2:更新解决了这些问题。
更新 1.90.1:此更新解决了这些问题。
下载: Windows: x64 Arm64 | Mac: 通用 Intel 硅 | Linux: deb rpm tarball Arm snap
欢迎来到2024年5月发布的Visual Studio Code。这个版本有很多更新,我们希望你会喜欢,其中一些主要亮点包括:
- 编辑标签多选 - 同时选择并执行多个标签上的操作。
- 配置文件 - 用你首选的配置文件在新Windows中打开。
- 编辑器操作 - 立即在编辑器组之间访问编辑器操作。
- Copilot扩展 - 使用聊天和语言模型API将AI构建到您的扩展中。
- VS Code Speech - 自动使用文本转语音读出 Copilot Chat 响应。
- 在笔记本中查找 - 将搜索限制在笔记本中选定的单元格。
- 聊天上下文 - 在聊天中快速附加不同类型的上下文。
- 聊天响应中的IntelliSense - 使用IntelliSense更好地理解生成的代码。
如果您想在线阅读这些发行说明,请访问 更新 页面 code.visualstudio.com。 内部测试者: 想尽快尝试新功能吗?您可以下载 内部测试者 夜间构建版本,并在最新更新发布后立即尝试。
无障碍
从辅助功能帮助对话框设置快捷键
无障碍帮助对话框为您提供有关功能或视图的重要命令概述。当某个命令没有键绑定分配时,您现在可以从无障碍帮助对话框内进行配置,使用⌥K(Windows, Linux Alt+K)。
实验:信号延迟设置
当设置去抖动位置变化启用后,您可以使用该设置信号选项延迟定制各种无障碍信号的去抖时间。
工作台
编辑标签多选
您现在可以同时选择多个标签页,使您可以同时对多个编辑器应用操作。这个新功能使您可以使用一个操作移动、固定或关闭多个标签页。要将另一个标签页添加到您的选择中,请使用按住Ctrl并点击输入:Cmd + 点击在 macOS 上)。要选择一系列标签,请使用按住Shift并点击输入:.
始终显示编辑器操作
我们正在介绍始终显示编辑器操作设置。启用此设置时,每个编辑器组的编辑器标题操作始终显示,无论编辑器是否处于活动状态。
当设置未启用(默认值)时,仅在编辑器活动时显示编辑器操作:

如果你启用该设置,编辑器操作始终可用,即使编辑器不处于活动状态:

将禁用液晶显示屏文本作为运行时参数
有禁用液晶显示屏文本,你可以在 Windows 上禁用 RGB 子像素渲染。禁用液晶显示屏文本设置现在支持作为运行时参数在argv.json 文件。以前,它只能作为未文档化的 CLI 标志使用。使用 偏好设置:配置运行时参数 命令来配置运行时参数。
在下面的图像中,你可以看到一个并排比较,左边是禁用液晶显示屏文本是真,而在右侧是假输入:.

主题: 浅粉色 (预览于 vscode.dev)
为新Windows配置自定义配置文件
之前,当您打开一个新的 VS Code Windows时,它会使用活动Windows的配置文件,如果没有活动Windows,则使用默认配置文件。现在,您可以通过配置来指定打开新Windows时应使用哪个配置文件。Windows.新建Windows配置文件设置。

源代码管理
焦点输入/资源组命令
这个里程碑,我们添加了几个工作台命令,这样你就可以为它们创建键盘快捷键:
- 聚焦于下一个或上一个源代码控制输入字段:
工作台.scm.操作.聚焦下一个输入,工作台.scm.操作.聚焦上一个输入 - 聚焦于仓库内的下一个或上一个资源组:
工作台.scm.操作.聚焦下一个资源组,工作台.scm.操作.聚焦上一个资源组
笔记本电脑
在单元格选择中查找
当你在一个笔记本中时,现在可以使用查找控件在选定单元格的特定范围内进行搜索。
设置后笔记本.实验性.查找.作用域.启用至真,在单元格选择中查找切换按钮将会出现在查找控制中。然后你可以选择一个单元格范围,或者打开查找控制,或者如果它已经打开了,选择“单元格选择中查找”按钮。
笔记本格式代码操作
笔记本现在支持一种新的代码操作,这种操作是用 定义的。笔记本格式 代码操作种类前缀。这些代码操作可以通过显式格式化请求(使用命令 Notebook: Format Notebook)或保存时格式化请求自动触发。
这些可以通过使用工作区编辑和笔记本编辑来提供更强大的格式化功能。要开始,请在vscode-extension-samples仓库中查看一个示例扩展。
终端
⚠️ 移除 canvas 渲染器
Canvas渲染器在VS Code 1.89版本中被弃用,现在已被完全移除。这意味着在少数不支持WebGL2的机器上,终端现在使用基于DOM的渲染器。您可以在终端文档中了解更多关于GPU加速的信息。
在终端中重新缩放重叠的字形
设定终端.集成.重缩重叠的字形在 VS Code 1.88 版本中作为预览功能引入,现在默认启用。此功能重新缩放重叠的字形,这些字形后续的单元格旨在覆盖宽度不明确的字符,可能与后端 pty/unicode 版本认为的字体字形不匹配。
例如,在大多数字体中,罗马数字的unicode字符(U+2160+) 通常占据多个单元格,因此启用此设置时会水平重新调整它们的大小。
不重新缩放:

进行重新缩放:

对扩展的贡献
GitHub Copilot
将上下文附加到聊天
为了使您的聊天提示更具体,您可以为聊天消息添加上下文。现在,您可以为聊天消息附加更多类型的上下文,例如工作区符号。之前,您使用' #'符号来引用文件或当前选择。现在,您可以通过在聊天视图输入字段中选择 📎 图标,或通过输入 ⌘/(Windows, Linux Ctrl+/)来附加上下文。
小贴士:使用右箭头键可以在保持上下文选择器打开的同时快速在后台附加上下文。当您在编辑器中时,您还可以右键单击选定内容并选择 Copilot > 将选定内容添加到聊天。
使用 Bing 搜索和企业知识库提问
GitHub Copilot Enterprise用户现在可以在VS Code中提出问题,这些问题将结合来自网络结果和您企业知识库的上下文信息。要尝试此功能,请安装最新预发布版本的Copilot Chat。
在聊天视图中,你可以问类似的问题@github Node.js的最新LTS版本是什么? #web利用网络搜索。任何由 Copilot 引用的搜索结果都会显示在使用的参考文献聊天响应部分。

您还可以直接从 VS Code 询问有关您企业知识库的问题,这些知识库是包含文档的 Markdown 代码库集合。只需输入@github #kb从可供您使用的知识库中选择。同样,任何由 Copilot 引用的知识库片段都会显示在使用的参考文献聊天响应部分。
这使得Copilot Enterprise用户可以通过使用现有的聊天变量,将搜索结果和内部文档与编辑上下文结合起来,例如#文件和#选择请尝试一下,并在 https://github.com/microsoft/vscode/issues上与我们分享您的反馈!
聊天代码块中的IntelliSense
我们现在支持在 Copilot 生成的代码块中使用基本的 IntelliSense。这使您可以使用与在编辑器中使用的许多相同的 IntelliSense 工具,从而更好地理解生成的代码。

支持的IntelliSense功能包括:
- 使用ctrl 点击 / cmd 点击或F12
- 悬浮
- 转到实现
- 转到类型定义
IntelliSense 甚至可以与 一起使用@工作区了解 Copilot 回复中使用的任何工作区符号。
TypeScript、JavaScript、HTML 和 CSS 代码块的 IntelliSense 可开箱即用。要获取更多语言支持,请尝试安装该语言的扩展,尽管并非每个语言扩展已经都对代码块 IntelliSense 提供支持。请为任何尚未支持此功能的语言提交功能请求。
改进了聊天响应中的链接
我们通过添加文件名和符号的链接来改进聊天响应。通过选择这些链接,您可以在编辑器中导航到相应的文件或符号。


在内联聊天和聊天视图之间漫游活动聊天
现在,您可以将已完成或仍在活动中的聊天请求从内联聊天移动到聊天视图。您可能使用此功能来清理内联聊天并将对话移至更持久的地方。要移动请求,请选择聊天输入框旁边的聊天图标。

自动重命名建议
如果您使用 Copilot Chat 扩展,当您重命名符号时,由 Copilot 提供的重命名建议现在会自动触发。您可以使用设置关闭此功能 github.copilot.renameSuggestions.triggerAutomatically输入:.
Python
测试错误修复
使用 pytest 重写 Python 测试时的体验已经得到改善,可以更好地支持在 pytest 的 cwd 与 VS Code 工作区根目录相邻时设置 pytest 的 cwd,并且在函数名称在类之间重复时在测试浏览器中显示参数化测试。
此外,我们通过将系统配置脚本路径添加到 PATH 来启用测试执行的 shell,从而减少了某些测试发现的失败场景。
实验性:带有智能感知和语法高亮的原生 Python REPL
您现在可以在带有Intellisense和语法高亮等特性的编辑器样REPL环境中运行您的Python代码,以提高与REPL的交互效率。要启用此功能,请设置"python.REPL.sendToNativeREPL": true在你的settings.json 文件。这将在 Shift+Enter 和 运行选择/行 时执行Python原生REPL中的代码。
您可以选择通过设置使用终端中的 Python REPL (>>>)
"python.REPL.sendToNativeREPL": false在你的settings.json此外,Python原生REPL将在回车时智能执行,类似于Python的原生交互解释器,如果你添加设置"interactiveWindow.executeWithShiftEnter": false在你的settings.json输入:.
GitHub 拉取请求和问题
在GitHub Pull Requests扩展上取得了更多进展,该扩展使您能够处理、创建和管理拉取请求和问题。查看0.90.0版本的更新日志,了解其他亮点。
VS Code 语音
我们为 VS Code Speech 扩展添加了文本转语音功能的支持。一个新的设置 无障碍语音自动合成可以启用自动朗读Copilot Chat响应,当语音也被用作输入时。
注意输入字段中的麦克风图标如何变化,表示文本被朗读出来。要中断合成,请选择该图标或按Escape。
每个聊天响应还显示一个新的说话者图标,这样您可以选择性地大声朗读响应:

您可以通过现有的设置更改用于文本转语音的语言无障碍语音语言设置。
预览功能
VS Code 原生的 PowerShell 智能感知
除了可靠性改进之外,我们还对终端中的 PowerShell 智能感知进行了以下更改:
终端.集成.外壳集成.建议启用已更改为终端.集成.建议.启用- 新的
终端.集成.建议.快速建议控制在输入空格后是否显示建议 - 新的
终端.集成.建议.在触发字符时建议控制是否在您输入时显示建议输入:/,输入:或输入:-
TypeScript 5.5
我们继续改进对即将发布的TypeScript 5.5版本的支持。请查看TypeScript 5.5测试版博客文章和迭代计划以了解此版本的详细信息。
要开始使用TypeScript 5.5测试版,请安装TypeScript Nightly扩展。请分享您的反馈,并告知我们您在使用TypeScript 5.5时遇到的任何问题。
网页问题报告者
我们已经改进了 VS Code Web 中的问题报告流程,以与用户在桌面版上的体验保持一致。选择 帮助:报告问题 会在新Windows中打开问题报告页面,用户可以在此选择错误类型、源和扩展(如果需要)。扩展信息、系统信息等会自动附加到在 GitHub 上创建的问题中。
此功能在该版本中默认是禁用的,但请通过开启该功能来分享您的反馈。issueReporter.实验性.网络报告器设置。
扩展编写
使用 esbuild 作为扩展
该你的代码扩展生成器用于TypeScript和网页现在有一个选项可以使用esbuild作为打包器。当您选择esbuild这创造了esbuild.js生成脚本并在中添加脚本条目package.json并构建任务在.vscode/tasks.json输入:.
使用esbuild 在现有的扩展中,查看 捆绑扩展 和 网络扩展 指南。
你可以在 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 是围绕 语言模型聊天用于聊天请求和计算代币的物体。
访问聊天对象的唯一方法是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) {
// 没有可用的模型
return;
}
两件事情非常重要当打电话时选择聊天模型
- 如果没有任何可用的模型且扩展必须处理此情况,则该函数返回一个空数组。
- Copilot的聊天模型在扩展使用之前需要用户的同意。同意是通过身份验证对话框实现的。因此,
选择聊天模型应该作为用户发起的动作(如命令)的一部分被调用,而不是“突然”调用。
有了聊天对象,扩展现在可以使用它来发送聊天请求。以下代码片段展示了如何发送聊天请求并处理响应流。
// 取第一个模型并说 "Hello"
const [chat] = models;
const messages = [vscode.LanguageModelChatMessage.User('Hello')];
const response = await chat.sendRequest(messages);
// 响应总是可以异步迭代,可以使用 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图书馆
为了帮助开发 GitHub Copilot 的 VS Code 扩展,我们开发并发布了一个基于 TSX 的库,用于声明复杂的提示并将其转换为聊天消息,受限于您的 LLM 的上下文Windows限制。在开发此库时,我们受到了 Anysphere 的启发。提示 library。如果你是一个计划使用聊天和语言模型API的扩展作者,请考虑尝试这个库的最新alpha版本:@vscode/prompt-tsx。
通过 GitHub 应用程序扩展 GitHub Copilot
通过贡献一个 GitHub App 也可以扩展 GitHub Copilot。这个 GitHub App 可以在 Chat 视图中贡献一个聊天参与者,你可以通过 来调用它。@GitHub App 支持一个服务,并且可以在所有 GitHub Copilot 平台上工作,例如 github.com、Visual Studio 或 VS Code。GitHub App 不具备完全访问 VS Code API 的权限。要通过 GitHub App 扩展 GitHub Copilot,您应该加入 Copilot 合作伙伴计划。您可以通过观看我们在 Microsoft Build 会议上传播的 扩展 GitHub Copilot 演讲来了解更多。
调试堆栈焦点API
VS Code 现在通过新的 API 在调试视图中暴露当前聚焦的堆栈帧和线程。vscode.debug.activeStackItem检索当前聚焦的堆栈项目(线程或堆栈框架),并且vscode.debug.onDidChangeActiveStackItem是当该内容更改时触发的事件。
这在结合使用扩展 VS Code 调试功能的 API 时非常有用,例如使用 调试适配器跟踪器了解更多关于创建调试器扩展的信息。
TestRunRequest.保持焦点应用程序编程接口
之前,由扩展触发的测试运行不会像UI发起的运行那样将焦点移至相同的测试结果视图。此行为现在可以通过一个配置选项进行配置。保持焦点在创建时可以设置的标志测试运行请求. 这个标志默认为真为了保持向后兼容性。
提议的API
可追溯测试覆盖范围
我们正在开发一个API,可以按测试逐个分配测试覆盖。这使用户可以看到哪些测试运行了哪些代码,过滤器既可以在编辑器中显示的覆盖范围,也可以在测试覆盖视图中显示的覆盖范围。请查看vscode#212196获取更多信息和更新。
悬停详细级别
最后一个里程碑,提出了一种新的API,用于提供悬停功能,其详细程度可以增加或减少。这个里程碑,API已经改变,以便于悬停详细信息请求使用一个冗余度增量用于指示悬停详细级别相对增加或减少。以前,悬停详细信息请求使用了枚举悬停详细信息操作用于指示是否应增加或减少详细程度。
工程
跟踪启动时的内存效率
我们每天都在 Windows、macOS 和 Linux 上测量 VS Code 内部版本的启动性能。我们主要关注在打开文本文件之前,启动速度有多快。
这个月我们增加了一个指标,计划改进以使启动更快:我们消耗了多少内存,以及其中有多少内存被V8垃圾回收。如果我们能降低这个数字,启动时间将不会受到V8垃圾回收运行的太大影响。

Electron 29 更新
在这个里程碑中,我们正在向使用我们稳定版本的用户推广 Electron 29 更新。此更新包含 Chromium 122.0.6261.156 和 Node.js 20.9.0。感谢所有在 Insiders 版本上自托管并提供早期反馈的每个人。
重要修复
- 212386 本地历史:不保存之前已删除文件的条目
- 213645 辅助Windows在Firefox中无法工作
- vscode-js-debug#2000/2002JavaScript调试器更快,特别是在处理源映射重命名时
谢谢
最后但同样重要的,向VS Code的贡献者们致以深深的谢意。
问题跟踪
对我们的问题跟踪的贡献:
拉取请求
贡献于Visual Studio Code输入:
- @BrunoSoaresEngineering: 功能(markdown-language-features): #208398 添加avif作为图像扩展 PR #212547
- @bsShoham (Shoham Ben Shitrit):移除全局启用消息 PR #213128
- @CharlesHGong (洪汉宁 (Charles)):修复一个默认线条差异计算机未传递超时变量的问题PR #213035
- @cpendery (Chapman Pendery):重构:在 Windows 上支持不使用正则表达式的动态终端提示检测PR #211382
- @DatN99 (Dat Nguyen):添加了笔记本单元格markdown行高的设置PR #212531
- @gjsjohnmurray (约翰·默里)
- 在从网页视图编辑器切换后使代码透镜正常工作(修复 #198309)PR #211999
- 复活
时间线变更事件.统一资源标识符如果通过时间线提供者.当更改时活动 PR #212927
- @kdy1 (Donny/강동윤):功能:使用官方的json schema for SWCPR #212158
- @mahmoudsalah1993 (Mahmoud Salah):在DidRegisterAllSupported上如果任何执行类型被重新... 火灾PR #212163
- @Maximetinu (Miguel Medina Ballesteros):添加
无障碍信号.终端命令成功和成功.mp3(问题 #178989) PR #204430 - @偶尔调试者
- 尊重堆栈框架在 getTopStackFrame 中减轻PR #211855
- 将插件的完整功能断点选项传递PR #211895
- @pouyakary (Pouya Kary ✨):功能:Bolder 字体类型 + 可配置的迷你地图部分标题标签字母间距 ✨ PR #209990
- @sean-mcmanus (Sean McManus):在cpp/language-configurations.json中添加 /** */ PR #211202
- @SimonSiefke (西蒙·西夫克)
- 修复:在源列渲染器中处理模板数据的 disposablePR #202618
- 功能:启用 TypeScript 隔离模块PR #212913
- 添加 editor.findMatchForeground PR #213497
- 修复编辑器未定义findMatchForeground时的错误颜色PR #213686
- @walkerdb (Walker Boyle):修复:当日志路径包含空格时,tsserver不再崩溃PR #212752
- @wenfangdu (文芳杜):在WorkspacesHistoryMainService中向COMMON_FILES_FILTER添加'git-rebase-todo'PR #211614
- @Yesterday17 (Yesterday17):修复:如果通过其他来源安装扩展,则删除临时目录PR #213379
贡献于vscode-eslint输入:
- @sapegin (Artem Sapegin):功能:允许 eslint.rules.customizations 针对所有可修复的规则PR #1841
贡献于vscode扩展示例输入:
- @moushicheng (某时橙):修复:lsp-embedded-language-serviceadd 添加激活事件以调用 客户端PR #936
贡献于vscode生成代码输入:
- @1chooo (洪春浩 林):移除不必要的空格在
ext-command-ts/vsc-extension-quickstart.md公关 #467 - @k35o (k8o):将文件中的空格转换为制表符
Visual Studio Code文件夹在模板文件夹 PR #458
贡献于vscode-十六进制编辑器输入:
- @lorsanta (Lorenzo Santangelo):添加复制选择作为不同格式,并支持粘贴十六进制字符串PR #498
- @tomilho (Tomás Silva):添加 copyOffsetAsHex/Dec PR #521
贡献于vscode语言服务器节点输入:
- @hyangah (Hyang-Ah Hana Kim):添加SemanticTokenTypes.labelPR #1423
- @imbant (imbant):修复“语义标记未按升序排列将不会被突出显示”PR #1467
- @rchiodo (Rich Chiodo):支持为笔记本拉取诊断信息 PR #1465
贡献于vscode-mypy输入:
- @hamirmahal (哈米尔·马哈尔):修复:已弃用的文档正在被使用PR #302
贡献于vscode-远程-尝试-点网输入:
- @cmaneu (克里斯托弗·马努):将演示应用程序迁移到 .NET 6 PR #31
贡献于语言服务器协议输入:
- @asukaminato0721 (Asuka Minato):添加-制造-LSP PR #1941
- @fbricon (Fred Bricon):在 tools.md 中添加 LSP4IJ 客户端 PR #1940
- @macnetic (Magnus Oksbøl Therkelsen):添加Verible语言服务器用于SystemVerilog PR #1929
- @ssbarnea (Sorin Sbarnea):正确的 Ansible 语言服务器链接 PR #1930
- @wiremoons (Simon Rowe):更新 servers.md - 添加 Odin 语言的 OLSPR #1931
- @ybiquitous (Koba Masafumi):将 LanguageServer::Protocol 添加到 Ruby 的 SDK 中PR #1937
贡献于摩纳哥编辑器输入:
- @htcfreek (Heiko):添加扩展到
csp.贡献.ts公关 #4504 - @jakebailey (Jake Bailey):在内部EmitOutput诊断中调用clearFiles,传递参数PR #4482
- @johnyanarella (约翰·亚纳雷拉):将所有项目和 vendored 文件中的 TypeScript 更新到 TS 5.4.5PR #4305
- @samstrohkorbatt:添加Python f-string语法支持PR #4401