2024 年 11 月 (版本 1.96)
更新 1.96.1:此更新解决了这些问题,并启用了GitHub Copilot 免费计划。
更新 1.96.2:此更新解决了这些问题。
更新 1.96.3:此更新解决了这些问题。
更新 1.96.4:此更新解决了这些问题。
下载:Windows:x64 Arm64 | Mac:通用 Intel Apple 芯片 | Linux:deb rpm tarball Arm snap
欢迎使用 Visual Studio Code 2024 年 11 月发布版。此版本包含许多更新,我们希望您会喜欢,其中一些主要亮点包括:
- GitHub Copilot 免费版 - 通过 GitHub Copilot 免费计划免费使用 Copilot
- 覆盖模式 - 在编辑器中切换覆盖或插入模式
- 粘贴时添加导入 - 粘贴代码时自动添加缺少的 TS/JS 导入
- 测试覆盖率 - 快速筛选特定测试覆盖的代码
- 移动视图 - 轻松在主侧边栏和辅助侧边栏之间移动视图
- 终端连字 - 在终端中使用连字
- 扩展允许列表 - 配置您的组织中可以安装哪些扩展
- 使用 Copilot 调试 - 使用
copilot-debug
终端命令启动调试会话 - 聊天上下文 - 添加符号和文件夹作为聊天和编辑的上下文
- 从聊天移动到 Copilot 编辑 - 切换到 Copilot 编辑以应用聊天中的代码建议
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新。Insiders:想尽快尝试新功能吗?您可以下载每晚Insiders版本并尽快尝试最新更新。
GitHub Copilot
GitHub Copilot 免费计划
我们很高兴地宣布全新的 GitHub Copilot 免费层级。注册GitHub Copilot 免费计划,您只需要一个 GitHub 帐户。您每月将获得一定数量的完成和聊天交互,每月重置。
您可以直接在 VS Code 中注册。按照Copilot 设置指南中的步骤操作。
了解有关Copilot 免费计划详细信息和条件的更多信息。
Copilot 编辑
上一个里程碑,我们推出了Copilot 编辑(目前处于预览阶段),它允许您使用自然语言一次性快速编辑多个文件。从那时起,我们不断迭代体验。您可以通过在命令中心打开 Copilot 菜单,然后选择“打开 Copilot 编辑”,或触发来试用 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 下载扩展。如果您想在不安装扩展的情况下下载它,这会很有用。
扩展磁盘空间
您现在可以在“扩展”编辑器中查看扩展在磁盘上的内存使用情况。这可以帮助您了解扩展正在使用多少磁盘空间。
资源管理器中的查找功能改进
在九月发布版中,我们引入了在整个项目中在资源管理器中查找文件的功能,这是以前无法实现的。然而,此更新暂时删除了高亮模式并限制了某些操作。
在此发布版中,我们重新引入了高亮模式。此功能允许您轻松地在工作区中定位文件和文件夹,并高亮显示匹配结果以提高可见性。此外,我们还在折叠的文件夹上引入了一个新的视觉指示器,显示其中是否隐藏了匹配项。
筛选器开关仍然可用,使您能够通过隐藏不匹配项来只关注与您的查询匹配的文件和文件夹。我们还重新启用了我们必须在以前的版本中禁用的所有上下文菜单操作。
我们还改进了使用查找控件时的用户体验。当滚动到文件资源管理器的顶部时,会在顶部创建额外的空间,确保控件不会阻碍您的搜索结果。
在主侧边栏和辅助侧边栏之间移动视图
您可以通过拖放或使用移动视图命令将视图容器移动到另一个位置。您现在可以直接在视图容器上使用“移动到”上下文菜单操作,以在主侧边栏、辅助侧边栏或面板区域之间移动它。
隐藏标题区域中的导航控件
有些人喜欢尽可能保持标题区域简洁。我们添加了一个新设置 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 文件之间复制和粘贴代码时自动添加导入。为了避免干扰您的工作流程,默认情况下,我们决定粘贴只插入纯文本,而“粘贴并导入”作为选项在粘贴控件中提供。但是,如果您希望 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 设置禁用。
覆盖模式
您知道吗,除非您安装了 Vim 键映射,否则 VS Code 不支持在编辑器中覆盖文本?应大众要求,我们现在添加了覆盖模式,以便在输入时覆盖编辑器中的文本,而不是插入文本。一个有用的场景是在编辑 Markdown 表格时,您希望表格单元格边界保持对齐。
此模式可以通过命令视图:切换覆盖/插入模式或使用键盘上的 Insert 键进行切换。当您处于覆盖模式时,状态栏会显示 OVR
指示器。
可以通过使用设置 editor.overtypeCursorStyle 在覆盖模式下更改光标样式。此外,还有一个设置 editor.overtypeOnPaste,它决定在覆盖模式下粘贴是覆盖还是插入。默认行为是插入粘贴的文本。
源代码管理
Git blame 信息(实验性)
此里程碑,我们增加了对使用编辑器装饰和状态栏项目显示 blame 信息的实验性支持。您可以通过使用 git.blame.editorDecoration.enabled 和 git.blame.statusBarItem.enabled 设置启用此功能。您可以将鼠标悬停在 blame 信息上以查看更多提交详细信息。
您可以使用 git.blame.editorDecoration.template 和 git.blame.statusBarItem.template 设置自定义在编辑器和状态栏中显示的消息格式。您可以使用变量来获取最常见的信息。例如,以下模板显示了提交的主题、作者姓名和相对于现在的作者日期
{
"git.blame.editorDecoration.template": "${subject}, ${authorName} (${authorDateAgo})"
}
如果您想调整编辑器装饰的颜色,请使用 git.blame.editorDecorationForeground
主题颜色。
请尝试此实验性功能,并告诉我们您的想法。
源代码控制图标题操作
根据用户反馈,我们已将“拉取”和“推送”操作重新引入源代码控制图视图标题栏。如果源代码控制图中显示当前历史项引用,则这些操作将启用。
如果您不想使用这些操作,或源代码控制图视图标题栏中的任何其他操作,您可以右键单击标题栏并将其隐藏。
Notebook
跨单元格选择高亮
现在笔记本中支持选择高亮,允许跨多个单元格基于文本选择进行高亮。这由现有的设置 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,使扩展能够提供基于每个测试的覆盖率,这样您就可以准确地看到任何给定测试执行了哪些代码。当可归因覆盖率可用时,在“测试覆盖率”视图中、编辑器操作中、在“测试覆盖率”工具栏(通过测试:测试覆盖率工具栏命令切换)中,或者简单地通过使用测试:按测试筛选覆盖率命令,都可以使用筛选按钮。
主题:Codesong(在vscode.dev上预览)
重构的内联失败消息
我们重构了测试失败消息,使其既更引人注目又更不显眼。这对于繁忙的场景特别有用,例如在 SCM 或 Copilot 编辑器的差异中。选择失败消息仍然会打开一个 Peek 控件以显示失败的完整详细信息。
持续运行 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"]
}
}
最后,如果您想完全禁用 paste with imports
,可以使用 typescript.updateImportsOnPaste.enabled 和 javascript.updateImportsOnPaste.enabled。
远程开发
远程开发扩展允许您通过 SSH 或远程隧道使用开发容器、远程机器或适用于 Linux 的 Windows 子系统 (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。此功能在您准备机器映像、虚拟机或云工作站(其中 VS Code 已预安装且特定扩展可立即供用户使用)的情况下非常有用。
注意:目前仅在 Windows 上支持预安装扩展。
按照以下步骤引导扩展
-
在 VS Code 安装目录中创建
bootstrap\extensions
文件夹。 -
下载您要预安装的扩展的 VSIX 文件,并将它们放入
bootstrap\extensions
文件夹中。 -
当用户首次启动 VS Code 时,
bootstrap\extensions
文件夹中的所有扩展都会在后台静默安装。
用户仍然可以卸载预安装的扩展。卸载扩展后重新启动 VS Code 不会重新安装该扩展。
对扩展的贡献
Python
Python 环境扩展
在此版本中,我们推出了 Python 环境扩展,现已在 Marketplace 上提供预览版。
此扩展简化了 Python 环境管理,提供了一个用于创建、删除和管理环境的 UI,以及用于安装和卸载包的包管理。
它旨在通过各种 API 与您首选的环境管理器无缝集成,默认支持全局 Python 解释器、venv 和 Conda。开发人员可以构建扩展以添加对其喜欢的 Python 环境管理器的支持,并与我们的扩展 UI 集成,从而增强功能和用户体验。
您可以在 Marketplace 中下载 Python 环境,并将其与 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: Select TypeScript Version...
命令更改 TypeScript 版本。
Microsoft 帐户现在使用 MSAL(在 Windows 上支持 WAM)
为了确保 Microsoft 身份验证的强大安全基线,我们已在 Microsoft 帐户扩展中采用了Microsoft 身份验证库。
这项工作的突出功能之一是 WAM(Web 帐户管理器……也称为代理)集成。简而言之,我们现在不是去浏览器进行 Microsoft 身份验证流,而是直接与操作系统通信,这是获取 Microsoft 身份验证会话的推荐方式。此外,它更快,因为我们能够利用您已登录到操作系统上的帐户。
如果您在此新流程中遇到任何问题,请告诉我们。如果您确实发现了一个重大问题并需要恢复到旧的 Microsoft 身份验证行为,您可以使用 microsoft-authentication.implementation(将其设置为 classic
并重新启动 VS Code)来执行此操作,但请记住此设置不会再存在很长时间。因此,如果您在使用 MSAL 流时遇到问题,请打开一个问题。
扩展开发
@vscode/chat-extension-utils
我们已经提供了聊天和语言模型扩展 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 聊天。为了更精细地控制上下文,您现在可以粘贴代码片段以将其作为聊天上下文附加。这会添加必要的文件信息和相应的行号。您只能粘贴来自当前工作区文件中的代码。
要试用此功能,请复制一些代码并将其粘贴到内联聊天、快速聊天或聊天视图中。选择出现的粘贴控件并选择“粘贴的代码附件”。或者,您可以设置 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
快速选择中的建议值选择 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 问题告诉我们您的想法!
拟议的本地窗口句柄 API
此里程碑,我们添加了一个新的拟议 API 来检索焦点窗口的本地窗口句柄。本地窗口句柄是一个操作系统概念,它本质上提供了一个指向特定窗口的指针。如果您正在与本地代码交互并且需要(例如)在窗口顶部渲染本地对话框,这将非常有用。
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 身份验证采用 MSAL 而添加的,这样我们就可以将本地句柄传递给操作系统,以便它可以在 VS Code 顶部渲染身份验证对话框。
如果您有使用案例或对nativeWindowHandle 提案的反馈,请通过此 GitHub 问题告诉我们您的想法!
工程
使用 vscode-unpkg 服务优化扩展更新
为了减少 Marketplace 基础设施的负载,VS Code 现在使用 vscode-unpkg
服务中新增的端点来检查扩展更新。该服务实现了服务器端缓存,TTL 为 10 分钟,这显著减少了对 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 上运行。在此里程碑中,我们已为受影响平台的用户添加了弃用通知,以让他们为迁移做准备。如果您是上述 OS 版本的用户,请查看我们的 FAQ 以获取更多信息。
值得注意的修复
- 233915 通过“扩展”视图中扩展上下文菜单中的“复制链接”操作与他人共享扩展。
- 231542 经常无法保存文件或文件数据因错误 EBUSY 而被删除
- 233304
onDidChangeCheckboxState
在 1.95 中损坏 - 232263 优化树视图,使跨进程调用批量处理
- 156723 使用 wayland 运行时修复拖放支持
感谢
最后但同样重要的是,向 VS Code 的贡献者们致以衷心的感谢。
问题跟踪
对我们问题跟踪的贡献
拉取请求
对 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): 修复:在 Windows 中使用 vscode-win32-x64 时无法打开 vscode PR #233285
- @BugGambit (Fredrik Anfinsen): 添加对链接 'foo,' 的支持
' PR #231775 - @cachandlerdev: 复制扩展链接 PR #234210
- @CrafterKolyan (Nikolai Korolev): 添加用于在 QuickPick 中添加值选择的扩展 API 接口 PR #233275
- @davidmartos96 (David Martos): 修复使用 Fish 时 PATH 预置问题 PR #232291
- @dibarbet (David Barbet): 不在 C# 中将插值标记标记为字符串 PR #232772
- @duncpro (Duncan): 修复:创建新文件/文件夹按钮的可点击性 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): 将“整理导入”命令标签更改为“优化导入” PR #232869
- @LionelJouin (Lionel Jouin): 修复: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): 还原与 copilot 相关的注册 copilot PR #233729
- @nickdiego (Nick Yamane): 修复在使用 Wayland 时拖放支持的问题 Chromium CL
对 vscode-emmet-helper
的贡献
- @onlurking (Diogo Felix): 将缺少的 HTML 标签添加到 Emmet PR #90
对 vscode-eslint
的贡献
对 vscode-extension-samples
的贡献
- @olguzzar (Olivia Guzzardo): 更新聊天教程以使用 request.model PR #1125
- @phil294 (Philip Waritschlager): webview-codicons: 将 codicons 依赖项从 devDependencies 移到 dependencies PR #1005
- @witsaint (gaodingqiang): 修复:
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): 修复:DisplayContextSelection 读取冲突 (#_547) PR #548
- @jogo-: 更新 CHANGELOG.md PR #549
- @tomilho (Tomás Silva): 修复:Caps Lock 激活时 Ctrl+F 不起作用 PR #555
对 vscode-json-languageservice
的贡献
- @jeremyfiel (Jeremy Fiel): 修复:
then
描述中的拼写错误 PR #251 - @Legend-Master (Tony): 修复大型 oneof 验证缓慢的问题 PR #247
- @sumimakito (Makito): feat(completion): 支持来自 schema 的详细信息 PR #243
对 vscode-jupyter
的贡献
- @gjsjohnmurray (John Murray): 添加
connor4312.esbuild-problem-matchers
建议 PR #16195 - @pwang347 (Paul): 为内核初始化后添加公共 API 事件 PR #16214
对 vscode-mypy
的贡献
- @hamirmahal (Hamir Mahal): 修复:解决
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): 修复:当 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