2024 年 11 月(版本 1.96)
更新 1.96.1:此更新解决了这些 问题,并启用了 GitHub Copilot 免费计划。
更新 1.96.2:此更新解决了这些 问题。
更新 1.96.3:此更新解决了这些 问题。
更新 1.96.4:此更新解决了这些 问题。
下载:Windows:x64 Arm64 | Mac:通用 Intel Silicon | Linux:deb rpm tarball Arm snap
欢迎使用 Visual Studio Code 2024 年 11 月版。此版本包含许多更新,我们希望您会喜欢,其中一些主要亮点包括
- GitHub Copilot 免费版 - 使用 GitHub Copilot 免费版免费使用 Copilot
- 覆盖模式 - 在编辑器中切换覆盖或插入模式
- 粘贴时添加导入 - 粘贴代码时自动添加缺少的 TS/JS 导入
- 测试覆盖率 - 快速筛选特定测试覆盖的代码
- 移动视图 - 轻松在主侧边栏和辅助侧边栏之间移动视图
- 终端连字 - 在终端中使用连字
- 扩展允许列表 - 配置组织中可以安装哪些扩展
- 使用 Copilot 进行调试 - 使用
copilot-debug
终端命令启动调试会话 - 添加上下文 - 将符号和文件夹添加为上下文聊天和编辑
- 将聊天会话移动到 Copilot 编辑 - 切换到 Copilot 编辑以应用来自聊天的代码建议
如果您想在线阅读这些发行说明,请访问 Updates 上的 code.visualstudio.com。Insiders: 想尽快尝试新功能吗?您可以下载每晚构建的 Insiders 版本,并在最新更新可用时立即尝试。
GitHub Copilot
GitHub Copilot 免费计划
我们很高兴宣布推出全新的 GitHub Copilot 免费层级。注册 GitHub Copilot 免费计划,您只需要一个 GitHub 帐户。您每月有权获得一定数量的补全和聊天互动,这些互动在每个月都会重置。
您可以直接从 VS Code 中注册。按照 Copilot 设置指南 中的步骤操作。
了解有关 Copilot 免费计划详细信息和条件的更多信息。
Copilot 编辑
上一个里程碑,我们推出了 Copilot 编辑(目前处于预览阶段),它允许您使用自然语言一次快速编辑多个文件。从那时起,我们继续迭代该体验。您可以通过打开命令中心的 Copilot 菜单,然后选择“打开 Copilot 编辑”,或通过触发 ⇧⌘I(Windows Ctrl+Shift+I,Linux Ctrl+Shift+Alt+I) 来试用 Copilot 编辑。
进度和编辑器控件
Copilot 编辑可以跨不同文件进行多项更改。您现在可以更清楚地看到编辑流中的进度。借助编辑器叠加控件,您可以轻松循环浏览所有更改并接受或放弃它们。
将聊天会话移动到 Copilot 编辑
您可以使用聊天视图来探索对代码进行更改的一些想法。现在,您可以将聊天会话移动到 Copilot 编辑,以应用来自会话的所有代码建议,而不是应用单个代码块。
工作集建议文件
在 Copilot 编辑中,工作集确定 Copilot 编辑可以建议更改的文件。为了帮助您将相关文件添加到工作集,对于 Git 存储库,Copilot 编辑现在可以根据您已添加的文件建议其他文件。例如,Copilot 编辑将建议经常与您已添加的文件一起更改的文件。
Copilot 在工作集中的添加文件按钮旁边显示建议的文件。您也可以选择添加文件,然后选择相关文件以从建议的文件列表中进行选择。
重启后恢复编辑会话
编辑会话现在可以在重启 VS Code 后完全恢复。这包括工作集、接受状态以及所有过去编辑步骤的文件状态。
从资源管理器、搜索和编辑器添加到工作集
您可以使用新的将文件添加到 Copilot 编辑上下文菜单操作,将文件添加到 Copilot 编辑工作集,该操作适用于搜索视图中的搜索结果和资源管理器视图中的文件。此外,您还可以从编辑器上下文菜单将文本选择附加到 Copilot 编辑。
使用 Copilot 进行调试
配置调试可能很棘手,尤其是在您处理新项目或语言时。在此里程碑中,我们引入了一个新的 copilot-debug
终端命令,以帮助您使用 VS Code 调试程序。您可以通过在通常运行的命令前加上 copilot-debug
来使用它。例如,如果您通常使用命令 python foo.py
运行程序,您现在可以运行 copilot-debug python foo.py
来启动调试会话。
程序退出后,系统会为您提供重新运行程序或查看、保存或重新生成用于调试程序的 VS Code 启动配置 的选项。
主题:Codesong(在 vscode.dev 上预览)
任务支持
Copilot 的调试功能,包括 copilot-debug
和 /startDebugging
意图,现在会为需要在调试前进行编译步骤的代码生成所需的 preLaunchTask
。对于编译语言(如 Rust 和 C++)来说,情况通常如此。
添加上下文
我们添加了将符号和文件夹作为上下文包含在 Copilot 聊天和 Copilot 编辑中的新方法,从而更轻松地在工作流程中引用相关信息。
符号
现在可以通过从大纲视图或面包屑导航栏中拖放符号到聊天视图中,轻松地将符号添加到 Copilot 聊天和 Copilot 编辑中。
我们还在聊天输入中引入了符号完成。通过键入 #
,后跟符号名称,您将看到来自您最近处理过的文件的符号建议。
要引用整个项目中的符号,可以使用 #sym
打开全局符号选择器。
文件夹
现在可以通过将文件夹从资源管理器、面包屑导航栏或其他视图拖到 Copilot 聊天中来将文件夹添加为上下文。
当文件夹被拖到 Copilot 编辑中时,文件夹中的所有文件都包含在工作集中。
Copilot 使用情况图
VS Code 扩展可以使用 VS Code API 来 构建 Copilot 的功能。您现在可以在运行时状态视图中看到扩展的 Copilot 使用情况图。此图显示了扩展在过去 30 天内发出的聊天请求数。
用于提交消息生成的自定义说明
Copilot 可以帮助您根据您所做的更改生成提交消息。在此里程碑中,我们为生成提交消息添加了对自定义说明的支持。例如,如果您的提交消息需要遵循特定格式,您可以在自定义说明中描述这一点。
您可以使用 github.copilot.chat.commitMessageGeneration.instructions 设置来指定自定义说明,或指定工作区中包含自定义说明的文件。这些说明将附加到用于生成提交消息的提示中。获取有关如何 使用自定义说明 的更多信息。
内联聊天
在此里程碑中,我们进一步改进了内联聊天的用户体验:我们使进度报告更加微妙,在流式传输更改时禁用波浪线,并且检测到的命令呈现得更好看。
此外,我们继续改进伪代码检测,现在当一行主要是自然语言时,会显示提示,您可以继续使用内联聊天。此功能使您可以在编辑器中键入伪代码,然后将其用作内联聊天的提示。您也可以通过按 ⌘I(Windows、Linux Ctrl+I) 来触发此流程。
此外,还有一个新的实验性设置,可在空行上显示内联聊天提示。可以通过 inlineChat.lineEmptyHint 启用此设置。默认情况下,此设置处于禁用状态。
终端聊天
终端内联聊天焕然一新,使外观和感觉更接近编辑器内联聊天
以下是一些其他值得注意的改进
- 小部件的布局和定位得到了改进,总体上表现更好
- 有一个模型选择器
- 底部的按钮现在更加一致
@workspace
的性能改进
当您使用 @workspace
向 Copilot 询问您当前打开的工作区时,我们首先需要将工作区缩小为一组相关的代码片段,我们可以将这些代码片段作为上下文移交给 Copilot。如果您的工作区由 GitHub 存储库支持,我们可以通过使用 Github 代码搜索快速找到这些相关的片段。但是,由于代码搜索索引跟踪存储库的主分支,因此我们无法依靠它来处理本地更改或分支上的更改。
在此里程碑中,我们致力于将 Github 搜索的速度优势带给分支和拉取请求。这意味着我们现在同时搜索基于存储库主分支的远程索引,以及搜索任何本地更改的文件。然后我们将这些结果合并在一起,为 Copilot 提供一组快速且最新的代码片段以供使用。您可以阅读有关 Github 代码搜索以及如何启用它的更多信息。
辅助功能
代码操作辅助功能信号
某些代码操作可能需要很长时间才能完成,例如调用外部服务以生成图像替代文本的快速修复。可能不清楚它们何时被触发或何时完全应用。因此,我们添加了辅助功能信号来指示代码操作已被触发或应用。
您可以使用 accessibility.signals.codeActionTriggered 和 accessibility.signals.codeActionApplied 设置启用这些信号。
REPL 中的自动焦点管理
我们引入了一个新设置,以提高在 REPL 中工作时的辅助功能。使用 accessibility.replEditor.autoFocusReplExecution,您现在可以指定在执行代码时焦点保持不变 (none
)、移动到输入框 (input
) 还是移动到最近执行的单元格 (lastExecution
)。默认情况下,焦点会移动到输入框。
工作台
改进的扩展搜索结果
当您在扩展视图中使用自由文本搜索扩展时,已安装的扩展现在会显示在搜索结果的顶部。这样可以更轻松地在 Marketplace 中搜索时查找和管理已安装的扩展。
从扩展视图下载扩展
您现在可以通过使用扩展视图中扩展的上下文菜单中的下载操作,直接从 VS Code 下载扩展。如果您想在不安装扩展的情况下下载扩展,这会很有用。
扩展磁盘空间
您现在可以在扩展编辑器中查看扩展在磁盘上的内存使用情况。这可以帮助您了解扩展正在使用多少磁盘空间。
在资源管理器中查找的改进
在 9 月份的版本中,我们引入了在整个项目中查找资源管理器中文件的功能,这是一个以前不可用的功能。但是,此更新暂时删除了高亮模式并限制了某些操作。
在此版本中,我们将重新引入高亮模式。此功能使您可以轻松地在工作区中查找文件和文件夹,并将匹配结果高亮显示,以获得更好的可见性。此外,我们还在折叠的文件夹上引入了一个新的视觉指示器,显示匹配项是否隐藏在其中。
筛选器切换仍然可用,使您能够通过隐藏不匹配的项目来仅关注与查询匹配的文件和文件夹。我们还重新启用了在以前版本中不得不禁用的所有上下文菜单操作。
我们还改进了使用查找控件时的用户体验。当滚动到文件资源管理器的顶部时,会在顶部创建额外的空间,确保控件不会遮挡您的搜索结果。
在主侧边栏和辅助侧边栏之间移动视图
您已经可以使用拖放或使用移动视图命令将视图容器移动到另一个位置。您现在可以直接在视图容器上使用“移动到”上下文菜单操作,以在主侧边栏、辅助侧边栏或面板区域之间移动它。
隐藏标题区域中的导航控件
有些人喜欢尽可能保持标题区域的简洁。我们添加了一个新的设置 workbench.navigationControl.enabled,使您可以隐藏标题区域中的后退/前进按钮。
您还可以通过在标题区域中单击鼠标右键并选择导航控件来访问此设置。
编辑器
配置粘贴和拖放行为
当您将文件拖放到文本编辑器中或复制并粘贴文件到文本编辑器中时,VS Code 提供了多种将其插入到该文件中的方式。默认情况下,VS Code 尝试插入文件的相对于工作区的路径。现在,您可以使用拖放/粘贴控件来切换资源的插入方式。扩展还可以提供自定义编辑,例如在 Markdown 中,它提供的编辑会插入 Markdown 链接。
使用新的 editor.pasteAs.preferences 和 editor.dropIntoEditor.preferences 设置,您现在可以指定默认情况下将使用哪种编辑类型的首选项。例如,如果您希望复制/粘贴始终插入粘贴文件的绝对路径,只需设置
"editor.pasteAs.preferences": [
"uri.path.absolute"
]
这些设置是编辑种类的有序列表。默认情况下,应用首选种类的第一个匹配编辑。在应用默认编辑后,您仍然可以使用拖放/粘贴控件更改为其他类型的编辑。
这些新设置与我们在 JavaScript 和 TypeScript 中新的复制和粘贴与导入支持完美配合。此功能在跨 JavaScript 或 TypeScript 文件复制和粘贴代码时自动添加导入。为避免中断您的工作流程,默认情况下,我们决定粘贴只插入纯文本,而 paste with imports
作为粘贴控件中的选项提供。但是,如果您希望 VS Code 始终尝试粘贴与导入,只需设置
"editor.pasteAs.preferences": [
"text.updateImports"
]
现在,VS Code 会在可能的情况下自动尝试粘贴与导入,如果没有任何粘贴与导入编辑可用,则回退到粘贴纯文本。目前,这仅适用于 JavaScript 和 TypeScript,但我们希望其他语言会随着时间的推移采用支持。
最后,您现在还可以在设置 editor.action.pasteAs
快捷键时指定首选的粘贴样式。下面的快捷键将始终尝试粘贴和更新导入
{
"key": "ctrl+shift+v",
"command": "editor.action.pasteAs",
"args": {
"preferences": ["text.updateImports"]
}
}
持久化编辑器查找历史记录
查找控件现在可以跨会话持久化搜索历史记录,并在 VS Code 重启后恢复它。搜索历史记录按工作区存储,可以通过 editor.find.history 设置禁用。
覆盖模式
您是否知道 VS Code 不支持在编辑器中覆盖文本,除非您安装了 Vim 快捷键映射?应用户的普遍要求,我们现在添加了覆盖模式,以便在编辑器中覆盖文本,而不是在键入时插入文本。这种情况的一个有用场景是编辑 Markdown 表格,您希望使表格单元格边界保持良好对齐。
可以使用命令视图:切换覆盖/插入模式或使用键盘上的 Insert 键切换此模式。当您处于覆盖模式时,状态栏会显示 OVR
指示器。
可以使用设置 editor.overtypeCursorStyle 更改覆盖模式下的光标样式。此外,还有一个设置 editor.overtypeOnPaste,它确定在覆盖模式下粘贴是否应覆盖或插入。默认行为是插入粘贴的文本。
源代码管理
Git 责备信息(实验性)
在此里程碑中,我们添加了实验性支持,以使用编辑器装饰和状态栏项目显示责备信息。您可以使用 git.blame.editorDecoration.enabled 和 git.blame.statusBarItem.enabled 设置启用此功能。您可以将鼠标悬停在责备信息上以查看更多提交详细信息。
您可以使用 git.blame.editorDecoration.template 和 git.blame.statusBarItem.template 设置自定义编辑器和状态栏中显示的消息格式。您可以使用变量来表示最常见的信息。例如,以下模板显示提交的主题、作者姓名和作者日期(相对于现在)
{
"git.blame.editorDecoration.template": "${subject}, ${authorName} (${authorDateAgo})"
}
如果您想调整编辑器装饰的颜色,请使用 git.blame.editorDecorationForeground
主题颜色。
试用此实验性功能,并告诉我们您的想法。
源代码管理图标题操作
根据用户反馈,我们已将“拉取”和“推送”操作重新添加到源代码管理图视图标题栏。如果当前历史记录项引用显示在源代码管理图中,则会启用这些操作。
如果您不想使用这些操作,或源代码管理图视图标题栏中的任何其他操作,则可以右键单击标题栏并隐藏它们。
笔记本
跨单元格的选择高亮显示
笔记本现在支持选择高亮显示,允许跨多个单元格进行基于文本选择的高亮显示。这由预先存在的设置 editor.selectionHighlight 控制。
多光标:选择所有查找匹配项
笔记本现在支持 选择所有查找匹配项 的键盘快捷键。这可以在命令 ID notebook.selectAllFindMatches
中找到,默认情况下可以使用按键 ⇧⌘L(Windows、Linux Ctrl+Shift+L) 使用。
在 Markdown 中为节运行单元格
笔记本现在已将 在节中运行单元格 操作公开到 Markdown 单元格的单元格工具栏。如果 Markdown 单元格具有标题,则将执行节和子节中包含的所有单元格。如果没有标题,则尽可能执行周围节中的所有单元格。
单元格执行时间详细程度
单元格状态栏中的执行时间信息现在有一个用于提高详细程度的选项。可以使用设置 notebook.cellExecutionTimeVerbosity 启用此选项,并且能够显示执行时间戳以及持续时间。
终端
连字支持
终端现在支持连字,无论是否使用 GPU 加速。可以使用设置 terminal.integrated.fontLigatures 启用此功能
为了使用此功能,请确保您还使用支持连字的字体 terminal.integrated.fontFamily。
用于自定义终端选项卡的新变量
终端选项卡中显示的文本由 terminal.integrated.tabs.title
和 terminal.integrated.tabs.description
设置确定,这些设置允许使用变量集合。我们现在支持以下新变量
-
${shellType}
- 终端中使用的 shell 的检测类型。这类似于默认值,但例如,在运行 git 命令时,它不会更改为git
。 -
${shellCommand}
- 终端中正在运行的命令。这需要 shell 集成。 -
${shellPromptInput}
- 终端中正在运行的命令或当前检测到的提示输入。这需要 shell 集成。
运行最近的命令现在显示历史记录源文件
运行最近的命令 shell 集成功能现在包括命令源的完整大小标题,包括历史记录文件(如果相关)和一个方便的按钮来打开它。
此命令的默认快捷键是 Ctrl+Alt+R
。
新的支持的链接格式
格式为 /path/to/file.ext, <line>
的链接现在应在终端中检测为链接。
测试
可归属的覆盖率
在此里程碑中,我们最终确定了一个 API,该 API 使扩展能够按测试提供覆盖率,因此您可以准确地看到任何给定测试执行的代码。当可归属的覆盖率可用时,测试覆盖率视图、编辑器操作、切换时测试覆盖率工具栏(通过测试:测试覆盖率工具栏命令)或仅通过使用测试:按测试筛选覆盖率命令中会提供一个筛选器按钮。
主题:Codesong(在 vscode.dev 上预览)
重新设计的内联失败消息
我们重新设计了测试失败消息,使其既更醒目又不那么突兀。这对于繁忙的场景特别有用,例如来自 SCM 或 Copilot 编辑的差异。选择失败消息仍然会打开一个速览控件来显示失败的完整详细信息。
持续运行 UI 的改进
以前,通过测试资源管理器视图中的“眼睛”图标可切换的持续测试运行的全局状态将使用默认的运行配置文件集打开或关闭持续运行。
我们重新设计了持续运行 UI,以包含一个下拉菜单,以按配置文件单独打开或关闭持续运行。选择指示器会打开或关闭上次使用的一组运行配置文件。
语言
TypeScript 5.7
我们的 JavaScript 和 TypeScript 支持现在使用 TypeScript 5.7。此主要更新包括许多语言和工具改进,以及重要的错误修复和性能优化。
您可以在 TypeScript 博客上阅读有关 TypeScript 5.7 版本的全部信息。我们在以下部分中还包含了一些工具亮点。
粘贴时自动添加 JavaScript 和 TypeScript 导入
是否厌倦了在文件之间移动代码后不得不手动添加导入语句?试试 TypeScript 5.7+ 的“粘贴时自动添加导入”功能。现在,无论何时在 JavaScript 或 TypeScript 文件之间复制粘贴代码,VS Code 都能为粘贴的代码自动添加导入语句。
请注意,不仅添加了导入语句,甚至还为粘贴代码中使用的局部变量添加了新的导出语句!
虽然我们认为此功能非常节省时间,但我们也考虑到可能会打断您现有的工作流程。因此,默认情况下,我们保持复制和粘贴始终只插入粘贴的文本。如果“粘贴时自动添加导入”编辑可用,您将看到粘贴控件,允许您选择“粘贴时自动添加导入”编辑。
如果您希望始终使用自动添加导入的方式粘贴,可以使用新的 editor.pasteAs.preferences
设置。
"editor.pasteAs.preferences": [
"text.updateImports"
]
这将始终尝试使用自动添加导入的方式粘贴,如果存在可用的编辑。
您还可以设置快捷键,以便在可用时使用自动添加导入的方式粘贴。
{
"key": "ctrl+shift+v",
"command": "editor.action.pasteAs",
"args": {
"preferences": ["text.updateImports"]
}
}
如果您愿意,您甚至可以反过来,将粘贴时自动添加导入设置为默认方式,并添加一个快捷键来粘贴为纯文本。
"editor.pasteAs.preferences": [
"text.updateImports"
]
{
"key": "ctrl+shift+v",
"command": "editor.action.pasteAs",
"args": {
"preferences": ["text.plain"]
}
}
最后,如果您想完全禁用 粘贴时自动添加导入
功能,可以使用 typescript.updateImportsOnPaste.enabled 和 javascript.updateImportsOnPaste.enabled。
远程开发
远程开发扩展允许您使用 Dev Container、通过 SSH 或 远程隧道 连接的远程计算机,或者 Windows Subsystem for Linux (WSL) 作为功能齐全的开发环境。
亮点包括:
remote-ssh
Copilot 聊天参与者- 增强的会话日志记录
您可以在远程开发发布说明中了解有关这些功能的更多信息。
企业支持
配置允许的扩展
现在,您可以使用 extensions.allowed 设置来控制哪些扩展可以安装在 VS Code 中。此设置允许您按发布者、特定扩展和版本指定允许或阻止的扩展。如果扩展或版本被阻止,则如果已安装,它将被禁用。您可以指定以下类型的扩展选择器:
- 允许或阻止来自发布者的所有扩展
- 允许或阻止特定扩展
- 允许特定扩展版本
- 允许特定扩展版本和平台
- 仅允许扩展的稳定版本
- 仅允许来自发布者的稳定扩展版本
以下 JSON 代码片段显示了不同设置值的示例:
"extensions.allowed": {
// Allow all extensions from the 'microsoft' publisher. If the key does not have a '.', it means it is a publisher ID.
"microsoft": true,
// Allow all extensions from the 'github' publisher
"github": true,
// Allow prettier extension
"esbenp.prettier-vscode": true,
// Do not allow docker extension
"ms-azuretools.vscode-docker": false,
// Allow only version 3.0.0 of the eslint extension
"dbaeumer.vscode-eslint": ["3.0.0"],
// Allow multiple versions of the figma extension
"figma.figma-vscode-extension": ["3.0.0", "4.2.3", "4.1.2"],
// Allow version 5.0.0 of the rust extension on Windows and macOS
"rust-lang.rust-analyzer": ["5.0.0@win32-x64", "5.0.0@darwin-x64"],
// Allow only stable versions of the GitHub Pull Requests extension
"github.vscode-pull-request-github": "stable",
// Allow only stable versions from redhat publisher
"redhat": "stable"
}
通过发布者 ID 指定发布者。如果键不包含句点(.
),则被视为发布者 ID。如果键包含句点,则被视为扩展 ID。目前不支持使用通配符。
您可以使用 microsoft
作为发布者 ID 来指代 Microsoft 发布的所有扩展,即使它们可能具有不同的发布者 ID。
不支持版本范围。如果您想允许扩展的多个版本,则必须单独指定每个版本。要进一步按平台限制版本,请使用 @
符号指定平台。例如,"rust-lang.rust-analyzer": ["5.0.0@win32-x64", "5.0.0@darwin-x64"]
。有关更多详细信息,请参阅企业文档。
管理员还可以通过 Windows 上的组策略配置此设置。有关更多信息,请参阅企业文档中的Windows 上的组策略部分。
使用预安装的扩展设置 VS Code
您可以将 VS Code 设置为一组预安装的扩展程序(bootstrap)。在您准备机器镜像、虚拟机或云工作站(其中预装了 VS Code 并且用户可以立即使用特定扩展程序)的情况下,此功能非常有用。
注意:目前仅在 Windows 上支持预安装扩展。
按照以下步骤引导扩展程序:
-
在 VS Code 安装目录中创建一个名为
bootstrap\extensions
的文件夹。 -
下载您要预安装的扩展程序的 VSIX 文件,并将它们放在
bootstrap\extensions
文件夹中。 -
当用户首次启动 VS Code 时,
bootstrap\extensions
文件夹中的所有扩展程序都会在后台静默安装。
用户仍然可以卸载预安装的扩展程序。卸载扩展程序后重启 VS Code 不会重新安装该扩展程序。
对扩展的贡献
Python
Python Environments 扩展
在此版本中,我们推出了 Python Environments 扩展,现在可以在 Marketplace 上预览。
此扩展简化了 Python 环境管理,提供了一个 UI 来创建、删除和管理环境,以及用于安装和卸载包的包管理。
它旨在通过各种 API 与您首选的环境管理器无缝集成,默认情况下支持全局 Python 解释器、venv 和 Conda。开发人员可以构建扩展来添加对其喜欢的 Python 环境管理器的支持,并与我们的扩展 UI 集成,从而增强功能和用户体验。
您可以从 Marketplace 下载 Python Environments,并将其与 Python 扩展的预发布版本一起使用。
Python 测试增强
- pytest 的
--rootdir
参数现在根据您的工作区中是否存在python.testing.cwd
设置动态调整。 - 现在,重新启动测试调试会话只会重新运行指定的测试。
- 代码覆盖率支持已更新,可以处理
NoSource
异常。 pytest-describe
插件在 UI 中支持测试检测和执行。- 测试重写现在利用 FIFO 而不是 UDS 进行进程间通信,允许用户在自己的测试设计中利用
pytest_socket
等 pytest 插件。 - 重写接近默认状态: 此版本解决了测试重写中的最后一个已知问题,除非出现更多问题,否则重写实验将在 2025 年初关闭,并将重写设置为默认值。
Python REPL 增强
- 智能发送到 Native REPL 后,焦点保留在编辑器中
- 改进了 Native REPL 重载后的处理
- 修复了 VS Code 终端中 Python 3.13 的缩进错误问题
Pylance “完整”语言服务器模式
python.analysis.languageServerMode
设置现在也支持 full
模式,使您能够充分利用 Pylance 的全部功能和最全面的 IntelliSense 体验。值得注意的是,这会以降低性能为代价,因为它可能导致 Pylance 占用大量资源,尤其是在大型代码库中。
python.analysis.languageServerMode
设置现在会根据设置为 light
、default
或 full
来更改以下设置的默认值:
设置 | light | default | full |
---|---|---|---|
python.analysis.exclude | ["**"] | [] | [] |
python.analysis.useLibraryCodeForTypes | false | true | true |
python.analysis.enablePytestSupport | false | true | true |
python.analysis.indexing | false | true | true |
python.analysis.autoImportCompletions | false | false | true |
python.analysis.showOnlyDirectDependenciesInAutoImport | false | false | true |
python.analysis.packageIndexDepths | [ { "name": "sklearn", "depth": 2 }, { "name": "matplotlib", "depth": 2 }, { "name": "scipy", "depth": 2 }, { "name": "django", "depth": 2 }, { "name": "flask", "depth": 2 }, { "name": "fastapi", "depth": 2 } ] |
[ { "name": "sklearn", "depth": 2 }, { "name": "matplotlib", "depth": 2 }, { "name": "scipy", "depth": 2 }, { "name": "django", "depth": 2 }, { "name": "flask", "depth": 2 }, { "name": "fastapi", "depth": 2 } ] |
{ "name": "", "depth": 4, "includeAllSymbols": true } |
python.analysis.regenerateStdLibIndices | false | false | true |
python.analysis.userFileIndexingLimit | 2000 | 2000 | -1 |
python.analysis.includeAliasesFromUserFiles | false | false | true |
python.analysis.functionReturnTypes | false | false | true |
python.analysis.pytestParameters | false | false | true |
python.analysis.supportRestructuredText | false | false | true |
python.analysis.supportDocstringTemplate | false | false | true |
TypeScript
TypeScript 可展开悬停提示(实验性)
在此里程碑中,我们实现了查看来自 TS 服务器的展开/折叠信息。该扩展使用可展开悬停提示 API 在编辑器悬停提示中显示 +
和 -
标记,以显示更多或更少的信息。
可以使用 typescript.experimental.expandableHover 启用此实验性设置。要使此设置生效,您必须使用 TypeScript 5.8 或更高版本。您可以使用 TypeScript: 选择 TypeScript 版本...
命令更改 TypeScript 版本。
Microsoft 帐户现在使用 MSAL(在 Windows 上支持 WAM)
为了确保 Microsoft 身份验证的强大安全基线,我们在 Microsoft Account 扩展中采用了Microsoft 身份验证库。
这项工作的一个突出特点是 WAM(Web Account Manager... 也称为 Broker)集成。简单来说,我们现在不再通过浏览器进行 Microsoft 身份验证流程,而是直接与操作系统对话,这是获取 Microsoft 身份验证会话的推荐方式。此外,由于我们能够利用您已在操作系统上登录的帐户,因此速度更快。
如果您发现此新流程有任何问题,请告知我们。如果您确实发现重大问题并且需要恢复到旧的 Microsoft 身份验证行为,您可以使用 microsoft-authentication.implementation(将其设置为 classic
并重启 VS Code)来完成,但请记住此设置不会存在太久。因此,如果您在使用 MSAL 流程时遇到问题,请打开一个 issue。
扩展创作
@vscode/chat-extension-utils
我们已经提供了 chat 和 语言模型 扩展 API 几个月了,以便扩展作者可以与 GitHub Copilot 集成。但我们发现,使用 LLM 并构建高质量的聊天扩展程序本身就很复杂,特别是当您想使用工具调用时。
我们发布了一个 npm 包 @vscode/chat-extension-utils
,旨在尽可能轻松地启动并运行聊天参与者。它接管了您原本必须自己做的几件事,以便您的聊天参与者可以用几行代码实现。该软件包还包含一系列有用的高质量元素,可与 @vscode/prompt-tsx 一起使用。
您可以在 chat-extension-utils
存储库中查看完整文档,并在示例聊天扩展中查看其运行情况。我们新的 LanguageModelTool API 文档也描述了如何使用它。
可归因覆盖率 API
测试覆盖率 API 现在使扩展程序能够提供基于每个测试的覆盖率信息。要实现此 API,请填充 FileCoverage
上的 includesTests?: TestItem[]
属性以指示哪些测试执行了该文件中的代码,并实现 TestRunProfile.loadDetailedCoverageForTest
以提供语句和声明覆盖率。
有关用户看到的示例,请参阅上面的可归因覆盖率部分。
为 JavaScript 调试终端做出贡献
JavaScript 调试器现在具有一种机制,允许其他扩展程序参与创建 JavaScript 调试终端。这使框架或 Node.js 以外的运行时能够在相同的熟悉位置启用调试。有关更多信息,请参阅JavaScript 调试器文档。
Node.js fetch
API 的代理支持
全局 fetch
函数现在启用了代理支持(http.fetchAdditionalSupport)。这类似于已经具有代理支持的 https
模块。
预览功能
粘贴代码以附加聊天上下文
以前,您已经可以将文件作为上下文附加到 Copilot Chat。为了更精细地控制上下文,您现在可以粘贴代码片段以将其作为聊天上下文附加。这将添加必要的文件信息和相应的行号。您只能粘贴来自当前工作区中文件的代码。
要试用此功能,请复制一些代码并将其粘贴到内联聊天、快速聊天或聊天视图中。选择显示的粘贴控件,然后选择 粘贴的代码附件
。或者,您可以设置 editor.pasteAs.preferences 设置。
"editor.pasteAs.preferences": [
"chat.attach.text"
]
更多 Shell 的终端补全
在之前的迭代中,我们为 pwsh
添加了实验性终端补全支持。在此版本中,我们已开始扩展到其他 Shell。目前主要针对 bash
和 zsh
,但由于这种新方法由扩展主机 API 提供支持,我们计划为大多数 Shell 提供通用支持。
您可以通过设置 terminal.integrated.suggest.enabled 和 terminal.integrated.suggest.enableExtensionCompletions 来试用当前正在进行的工作。目前仅支持 cd
、code
和 code-insiders
参数。
建议的 API
Quick Pick 上的建议值选择 API
对于 InputBox
,您已经可以设置“值选择”,这使您能够以编程方式选择部分或全部输入。在此里程碑中,我们为 QuickPick 中的值选择添加了一个建议的 API。
以下是它可能的样子示例:
const qp = vscode.window.createQuickPick();
qp.value = '12345678';
qp.valueSelection = [4, 6];
qp.items = [
{ label: '12345678', description: 'desc 1' },
{ label: '12345678', description: 'desc 2' },
{ label: '12345678', description: 'desc 3' }
];
qp.show();
试用 valueSelectionInQuickPick 提案,并在此 GitHub issue 中告诉我们您的想法!
建议的 Native Window Handle API
在此里程碑中,我们添加了一个新的建议 API,用于检索焦点窗口的 native window handle。Native window handle 是一个操作系统概念,本质上提供了指向特定窗口的指针。如果您正在与本机代码交互,并且需要例如在本机对话框中渲染在窗口之上,这将非常有用。
declare module 'vscode' {
export namespace window {
/**
* Retrieves the native window handle of the current active window.
* This will be updated when the active window changes.
*/
export const nativeHandle: Uint8Array | undefined;
}
}
添加此功能专门用于 Microsoft Authentication 采用 MSAL,以便我们可以将 native handle 传递到操作系统,以便它可以将身份验证对话框渲染在 VS Code 之上。
如果您对 nativeWindowHandle 提案有任何用例或反馈,请在此 GitHub issue 中告诉我们您的想法!
工程
使用 vscode-unpkg 服务优化扩展更新
为了减少 Marketplace 基础设施的负载,VS Code 现在使用新添加的来自 vscode-unpkg
服务的端点来检查扩展更新。该服务实现了具有 10 分钟 TTL 的服务器端缓存,这显着减少了对 Marketplace 的直接请求数量。此优化通过 extensions.gallery.useUnpkgResourceApi 设置控制(默认启用)。
如果您注意到扩展更新有问题,可以使用 extensions.gallery.useUnpkgResourceApi 禁用此功能,并恢复为直接 Marketplace 版本检查。
编辑器中 GPU 加速的基础工作
我们很高兴地宣布,我们已开始在编辑器中启用 GPU 加速的工作,类似于终端。此项工作的目标主要是通过减少输入延迟和提高滚动性能来改善整体编码体验。
这仍然处于早期阶段,尚未准备好进行测试,但我们想分享一些关于已取得进展的详细信息:
- GPU 渲染器在幕后使用 WebGPU。
- 我们目前专注于功能对等和正确性,而不是性能。
- 当启用 GPU 加速时,存在回退机制,允许行在未完全支持时“回退”到 DOM 渲染。这意味着我们可以尽早进行自托管,并且当前不兼容的行将使用 DOM 方法显示。目前回退行的示例包括:超过 200 个字符的行、具有某些 Monaco 装饰器(例如,淡化未使用的变量)的行、换行的行等等。
- Monaco 的内联装饰器(允许样式化包含字符的实际元素)对该功能构成了巨大的挑战,因为它们使用 CSS 进行样式化。我们用于支持大多数内联装饰器而不破坏或更改 API 的方法是检测附加到这些装饰器的 CSS,然后支持常见 CSS 属性的子集,如果不支持所有样式则回退。
这是该功能运行中的屏幕截图。请注意,装订线中的黄线告诉我们哪些行正在使用回退渲染。此特定情况由于 dontShow
参数具有内联装饰器(因为它未使用)而使用回退渲染。
跟踪此工作的 issue 是 #221145,其中包含频繁的更新以及关于进展的更多详细信息。
macOS 10.15 的 EOL 警告
VS Code 桌面将在接下来的几个里程碑中更新到 Electron 33。随着 Electron 33 的更新,VS Code 桌面将不再在 macOS Catalina 上运行。在此里程碑中,我们为受影响平台上的用户添加了弃用通知,以帮助他们为迁移做好准备。如果您是上述操作系统版本的用户,请查看我们的 FAQ 以获取更多信息。
值得注意的修复
- 233915 通过在扩展视图中扩展的上下文菜单中使用复制链接操作与他人共享扩展。
- 231542 经常无法保存文件或文件数据被错误 EBUSY 擦除
- 233304
onDidChangeCheckboxState
在 1.95 中损坏 - 232263 优化树视图,以便跨进程调用可以批量处理
- 156723 在使用 wayland 运行时,拖放支持已修复
感谢您
最后但同样重要的是,非常感谢 VS Code 的贡献者。
Issue 跟踪
对我们的 issue 跟踪的贡献
Pull 请求
对 vscode
的贡献
- @a-stewart (Anthony Stewart):在侧边栏和面板标题以及视图之间添加边框支持 PR #157318
- @aravind-n (Aravind Nidadavolu):修复 fish shell 集成执行顺序 PR #226589
- @BABA983 (BABA):更正 markdownDescription 中的 ShellIntegrationDecorationsEnabled PR #233387
- @BenLocal (benshi):Cli serve_web 将路径前缀设置为 /
- /,提交值解析错误 PR #233986 - @BlackHole1 (Kevin Cui):fix: 在 Windows 中使用 vscode-win32-x64 时无法打开 vscode PR #233285
- @BugGambit (Fredrik Anfinsen):添加对链接 'foo,
' 的支持 PR #231775 - @cachandlerdev:复制扩展链接 PR #234210
- @CrafterKolyan (Nikolai Korolev):为扩展 API 添加在 QuickPick 中添加值选择的接口 PR #233275
- @davidmartos96 (David Martos):修复使用 Fish 时 PATH 前置的问题 PR #232291
- @dibarbet (David Barbet):不要将插值标记标记为 C# 中的字符串 PR #232772
- @duncpro (Duncan):fix: 创建新文件/文件夹按钮的可点击性 PR #232130
- @elias-pap (Elias Papavasileiou):feat: 添加 Vite 的图标 PR #234620
- @gjsjohnmurray (John Murray)
- 添加
workbench.view.showQuietly
设置对象以阻止扩展显示隐藏的输出视图 (fix #105270) PR #205225 - 修复
Go to Current History Item
损坏 (fix #235063) PR #235067 - 在引用选择器更改后正确启用
Go to Current History Item
(fix #235132) PR #235134
- 添加
- @iisaduan (Isabel Duan):修复 typescript organizeImports 设置 PR #232676
- @jeanp413 (Jean Pierre):修复在浏览器中重新加载 vscode web 选项卡后旧的 extensionHost 进程不会立即被杀死 PR #234944
- @Kannav02 (Kannav Sethi):将“Organize Imports”命令标签更改为“Optimize Imports” PR #232869
- @LionelJouin (Lionel Jouin):Fix: go 语法更新 (#_232142) PR #232335
- @LitoMore (LitoMore):删除与 Microsoft 相关的徽标 PR #215758
- @Logicer16 (Logicer):修复 activeOnStart 描述中的语法 PR #197536
- @RedCMD (RedCMD):将
.winget
文件扩展名添加到 YAML PR #232218 - @ribru17 (Riley Bruins):将 JSDoc 示例渲染为 typescript 代码 PR #234143
- @sandersn (Nathan Shively-Sanders):Revert register copilotRelated with copilot PR #233729
- @nickdiego (Nick Yamane):修复使用 wayland 时拖放支持的问题 Chromium CL
对 vscode-emmet-helper
的贡献
- @onlurking (Diogo Felix):向 emmet 添加缺少的 HTML 标签 PR #90
对 vscode-eslint
的贡献
对 vscode-extension-samples
的贡献
- @olguzzar (Olivia Guzzardo):更新 Chat 教程以使用 request.model PR #1125
- @phil294 (Philip Waritschlager):webview-codicons: 将 codicons 依赖项从 devDependencies 移动到 dependencies PR #1005
- @witsaint (gaodingqiang):fix:
lsp-embedded-language-service
cleaninterval args type PR #1126
对 vscode-extension-telemetry
的贡献
- @kmagiera (Krzysztof Magiera):传播会话 ID 元数据 PR #215
对 vscode-hexeditor
的贡献
- @Antecer (Antecer):我们需要 WYSIWYG 复制方法 PR #540
- @Hexa3333 (Alp Yılmaz):Fix: DisplayContextSelection 读取违规 (#_547) PR #548
- @jogo-:更新 CHANGELOG.md PR #549
- @tomilho (Tomás Silva):fix: ctrl+f 在大写锁定激活时不起作用 PR #555
对 vscode-json-languageservice
的贡献
- @jeremyfiel (Jeremy Fiel):fix:
then
描述中的错别字 PR #251 - @Legend-Master (Tony):修复缓慢的大型 oneof 验证 PR #247
- @sumimakito (Makito):feat(completion): 支持来自 schema 的 detail PR #243
对 vscode-jupyter
的贡献
- @gjsjohnmurray (John Murray):添加
connor4312.esbuild-problem-matchers
推荐 PR #16195 - @pwang347 (Paul):为内核后初始化添加公共 API 事件 PR #16214
对 vscode-mypy
的贡献
- @hamirmahal (Hamir Mahal):fix: 解决
npm audit
报告的 dev-dependency 问题 PR #327 - @taesungh (Taesung Hwang):对
ignorePatterns
默认值使用全局设置 PR #325
对 vscode-python-debugger
的贡献
对 vscode-python-tools-extension-template
的贡献
对 vscode-test-web
的贡献
- @Cecil0o0 (hj):VS Code main 已移回 npm,我们可以捕获它 PR #148
对 inno-updater
的贡献
- @BlackHole1 (Kevin Cui):fix: 当 silent 为 true 时,对话框会显示 PR #29
对 language-server-protocol
的贡献
- @EwanDubashinski (Ivan Dubashinskii):添加指向 PL/SQL 语言服务器的链接 PR #2057
- @gquerret (Gilles Querret): 在语言服务器列表中添加 OpenEdge ABL PR #2056
- @orbitalquark: 为 Textadept 添加了客户端实现的链接。 PR #2058