尝试在 VS Code 中使用

2023 年 11 月 (版本 1.85)

更新 1.85.1:此更新修复了这些问题

更新 1.85.2:此更新修复了这些问题

下载:Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap


欢迎使用 Visual Studio Code 2023 年 11 月版。此版本中有许多我们希望您会喜欢的新功能,其中一些主要亮点包括:

如果您想在线阅读这些发布说明,请访问 code.visualstudio.com 上的更新页面。

Insiders:想尽快尝试新功能?您可以下载每晚的 Insiders 版本,并在最新更新发布后立即试用。

GitHub Universe、Copilot 和 VS Code

如果您观看了或参加了今年的 GitHub Universe,您会看到 GitHub Copilot 成为了焦点。Copilot 在开幕主旨演讲和分组会议(例如GitHub Copilot:今天和未来的 AI 结对编程助手)中都有所提及。

VS Code 团队一直致力于将 Copilot 集成到编辑器中,您可以在最近的博客文章VS Code 中对“极致智能”的追求中详细了解该团队在 GitHub Universe 前夕的进展。该文章详细介绍了充当代码库和技术领域专家的 Copilot Chat 代理的开发情况,并描述了扩展作者将如何能够向 VS Code 贡献他们自己的自定义代理。

辅助功能

辅助功能视图

在上次迭代中,我们引入了在按下按键时自动关闭辅助功能视图的功能,以便在 UI 组件及其辅助功能视图之间实现无缝切换。在某些情况下,此行为可能不是您想要的,现在可以通过 accessibility.accessibleView.closeOnKeyPress 设置禁用它。

如果您发现在终端和终端的辅助功能视图之间切换,您可能需要启用 terminal.integrated.accessibleViewFocusOnCommandExecution 设置,该设置会在终端中执行命令后自动打开辅助功能视图。

键盘聚焦时显示的工具提示

为了改善键盘用户的体验,对于具有自定义悬停功能的项目(例如活动栏和状态栏项目),现在在键盘聚焦时显示工具提示。

Tooltip for Extensions view icon in the Activity Bar

语音检测超时

新的设置 accessibility.voice.speechTimeout 控制在接受语音输入(例如发送到 Copilot Chat)之前等待静默的时间。默认情况下,语音输入会在静默 1.2 秒后自动提交。您可以将此设置为 0 以完全禁用接受语音输入。

工作台

浮动编辑器窗口

我们很高兴地宣布,在此版本中,您可以将编辑器移出主窗口并放入自己的轻量级窗口中。在一个窗口中对编辑器所做的更改会立即应用于编辑器打开的所有其他窗口。

创建浮动编辑器窗口最简单的方法是将编辑器从当前窗口中拖出并将其放到桌面上的空白区域

主题:GitHub Dark(在 vscode.dev 上预览)

新的 workbench.editor.dragToOpenWindow 设置可以禁用此行为。

还有新的全局和上下文命令,用于将编辑器和编辑器组移动或复制到它们自己的窗口中

  • 视图:将编辑器复制到新窗口 (workbench.action.editor.copyWithSyntaxHighlightingAction)
  • 视图:将编辑器移动到新窗口 (workbench.action.editor.moveEditorToNextWindow)
  • 视图:将编辑器组复制到新窗口 (workbench.action.editor.copyGroupToNextWindow)
  • 视图:将编辑器组移动到新窗口 (workbench.action.editor.moveGroupToNextWindow)
  • 视图:新建空编辑器窗口 (workbench.action.newWindow)

浮动窗口中的编辑器区域可以使用您想要的任何复杂布局进行排列。此外,由于终端和搜索结果都可以作为编辑器打开,您现在也可以将这些功能放在单独的窗口中!

Terminal and Search as editors in a floating window

试用一下这个新功能,并将您遇到的任何问题反馈给我们。请务必查看我们的现有问题并对缺失的功能进行投票。

文件资源管理器中对原生粘贴的支持

VS Code 现在支持将文件从操作系统的资源管理器原生粘贴到 VS Code 文件资源管理器中。

扩展自动更新控制

您现在可以选择要自动更新哪些扩展。如果您不想自动更新所有扩展,而是选择性地选择要自动更新的扩展,这将很有帮助。您可以选择某个扩展或某个发布者的所有扩展。如果您选择自动更新某个发布者的所有扩展,则可以从该发布者中取消选择个别扩展。

Choose extensions to auto update

您应该禁用自动更新 () 或为选定的扩展启用自动更新 (选定的扩展) 才能使用此功能。

Auto update mode options with Selected Extensions checked

新的配置文件图标

以下新的配置文件图标可添加到您的配置文件中。

New Profile icons

  • vr
  • piano
  • coffee
  • snake
  • robot
  • game
  • chip
  • music

设置编辑器搜索改进和错误修复

设置编辑器现在恢复了优先按匹配类型排序搜索结果,而不是仅按目录排序。换句话说,标题和关键字匹配项会显示在顶部,这样您就不必向下滚动即可找到标题匹配的设置。

Settings editor showing the windows.titleBarStyle setting appearing first when searching "title bar style"

主题:Light Pink(在 vscode.dev 上预览)

对于平局情况,设置编辑器仍然按目录顺序对设置进行排序,这意味着对于诸如 @ext:<extension-id> 之类的搜索查询,将遵循扩展作者的 order 键。

在此迭代中还修复了许多设置编辑器的回退问题,包括设置编辑器由于网络问题无法加载以及在某些搜索查询时挂起。

编辑器

保存时和自动保存时的代码操作

您现在可以在编辑器中启用自动保存时的代码操作,并且编辑器: 保存时代码操作 (editor.codeActionsOnSave) 设置已迁移到相应的枚举值。当设置为 always 时,您保存或通过窗口更改 (onWindowChange) 或焦点更改 (onFocusChange) 自动保存时,都会运行代码操作。要启用此功能,请勾选编辑器: 保存时代码操作 (editor.codeActionsOnSave) 并将每个代码操作的设置更改为 always

设置值的更新如下,以前的布尔值将被弃用,推荐使用等效的字符串值。

选项包括

  • explicit - 在明确保存时触发代码操作。与 true 相同。
  • always - 在明确保存时以及因窗口或焦点更改而触发的自动保存时触发代码操作。
  • never - 从不在保存时触发代码操作。与 false 相同。

多文档高亮

多文档高亮已通过新的提议的 MultiDocumentHighlightProvider API 获得了更多支持。现在对 TypeScript 语言的语义出现高亮提供了内置支持,可以通过将编辑器:出现高亮 (editor.occurrencesHighlight) 设置值从 singleFile 更改为 multiFile 来启用。对于 TypeScript 以外的语言,在实现更多特定语言的提供者之前,多文档出现将基于文本出现而不是语义出现进行高亮。

源代码管理

传入/传出更改

在此里程碑版本中,我们在源代码管理视图中引入了一个新的传入/传出部分,以显示当前分支与其远程分支相比的传入和传出更改。新部分显示了包含更改资源数量以及插入和删除的单个更改,以及一个总结所有更改中所有资源的所有更改条目。可以使用 scm.showIncomingChangesscm.showOutgoingChanges 设置控制新部分的可见性。这两个设置都支持以下值:always(始终)、auto(默认)和 never(从不)。

Incoming/Outgoing changes in the Source Control view

输入最大行数

之前,源代码管理输入框会自动增长以最多显示 6 行文本,这对于大多数提交消息来说足够了。然而,在某些情况下需要更多空间,因此新增了一个设置 scm.inputMaxLines,用于控制源代码管理输入框的最大行数。

终端

粘性滚动

粘性滚动已登陆终端!利用外壳集成提供的知识,视口顶部命令的提示会固定在终端顶部,类似于编辑器中的粘性滚动工作方式。

Running 'ls' command in the terminal will show the 'ls' prompt at the top of the terminal

点击粘性滚动元素将滚动到终端缓冲区的那一部分。

此功能目前默认禁用,但可以通过设置 "terminal.integrated.stickyScroll.enabled": true 启用。我们计划将来默认启用此功能,届时您可以通过右键单击并关闭它来选择退出。

命令高亮

在终端中悬停在命令上时,现在会在命令左侧显示高亮条。这对于纯文本终端提示非常有用,因为在纯文本提示中很难区分命令的开始和结束位置。

Hovering a command will show a line to the left that highlights the command and its output

外壳集成和命令导航改进

随着粘性滚动的引入,外壳集成得到了许多改进。特别是对于在 Windows 上运行的终端,从外壳集成接收到的标记并非完全可靠。现在有了智能扫描终端内容并在使终端命令可用之前调整标记的逻辑。

外壳集成现在还能够检测提示的不同部分;提示本身及其输入。这决定了在使用粘性滚动时命令的哪个部分会显示。它还会从提示顶部修剪空行,这通常用于分隔输出并使终端更易于阅读。

现有的命令导航功能也从中受益,因为您可以导航到用于粘性滚动的更可靠的提示,而不是不太可靠的提示行。

之前

Before only a single line would be highlighted

之后

When navigating commands, the entire prompt is now highlighted

改进的下划线渲染

终端中的虚线和点状下划线现在以像素完美模式渲染

Dotted and dashed underlines are now pixel perfect

The underline improvements also work when zoomed in

Git pull 快速修复

如果 Git 分支检出可以快进,则新的终端快速修复提供了运行 git pull 的选项。

任务

现在可以将 npm.packageManager 设置为 bun,以启用检测和运行在 package.json 中定义的 Bun 脚本。

调试

JavaScript 调试器

可视化堆快照

保存为 .heapsnapshot 的 V8 堆快照现在可以在 VS Code 中可视化。既有传统的表格视图,也有给定内存对象的持有者图表表示。

Graphical view of a heap snapshot showing references to a specific memory object

主题:Codesong(在 vscode.dev 上预览)

调试任何 JavaScript 代码时,可以使用获取性能分析命令捕获堆快照。也可以通过浏览器开发者工具的内存标签页捕获。

改进的事件监听器断点视图

调试 Microsoft Edge 或 Google Chrome 浏览器时显示的事件监听器断点视图已得到改进。它现在是一个复选框列表,并支持根据 URL 暂停 XHR/fetch 请求。

Event Listener Breakpoints view with "XHR/fetch URL" checked and "Add new URL" option highlighted

使用 Rust 调试 WebAssembly

VS Code 和 wasm-bindgen 都进行了更改,使得编译为 WebAssembly 的 Rust 可以在 VS Code 中进行调试。有关更多信息,请参阅我们关于WebAssembly 调试的文档。

测试

查找控件现在在测试结果视图终端中得到支持。

语言

TypeScript 5.3

此版本包括 TypeScript 5.3。此主要更新增加了对导入属性的支持、更好的类型缩小等。它还包含新的语言工具功能和错误修复。

您可以在TypeScript 博客中阅读有关 TypeScript 5.3 的更多信息。

转到工作区中的符号现在默认排除 node_modules 中的符号。这使得查找代码中的符号更容易,而不会被已安装包中的符号淹没。

通过设置 "typescript.workspaceSymbols.excludeLibrarySymbols": false,您可以恢复到包含项目中所有符号的先前行为。

内嵌提示跳转到定义

JavaScript 和 TypeScript 中的内嵌提示现在是交互式的。将鼠标悬停在类型上,然后在 Windows 和 Linux 上按住 Ctrl 或在 macOS 上按住 Cmd 并单击即可快速跳转到类型的定义。

Inlay hint hover showing Go to Definition by using Ctrl/Cmd + click

优先使用 'type' 进行自动导入

仅类型导入允许您导入一个类型,同时确保导入在运行时完全擦除。如果您希望始终默认使用 type 导入,现在可以设置 "typescript.preferences.preferTypeOnlyAutoImports": true,自动导入将使用仅类型导入。此设置默认关闭。

远程开发

远程开发扩展允许您使用开发容器、通过 SSH 或远程隧道连接远程机器,或者使用适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。

亮点包括

  • 在开发容器中自动安装GitHub Copilot拉取请求和问题扩展。
  • 更精细地控制在开发容器中安装哪些扩展。
  • 在本地开发容器和 WSL 会话中复用本地机器证书。

您可以在远程开发发布说明中详细了解这些功能。

对扩展的贡献

GitHub Copilot

内联聊天 UI 改进

内联聊天提示历史现在会在 VS Code 会话之间保留。查看上一个和下一个提示的键盘快捷键也更改为 ,以与 VS Code 中其他上一个和下一个项目的快捷键保持一致。

当内联聊天建议创建新文件时(例如使用 /test 斜杠命令时),您现在可以通过从创建下拉菜单中选择创建为来选择文件名和位置。

Create and Create As actions for newly suggested files from inline chat

最后,内联聊天新增了一个实验性的轻量级 UI 模式。它提供了更流畅的流式体验,并且仅在需要时渲染差异。您可以通过设置 "inlineChat.mode": "live3" 启用它。

Inline chat lightweight mode with diff on demand

用于修复的内联聊天显示摘要和后续操作

当使用用于修复的内联聊天 (/fix) 时,您现在还会获得一个简短的摘要,说明修复做了什么。如果还有剩余的错误,您可以通过单击提供的后续操作来细化修复。

Inline chat with summary

内联聊天中的渐进式消息渲染

内联聊天现在使用与聊天视图相同的渐进式渲染

Inline chat progressive rendering

终端生成提交消息快速修复

在上一个版本中,源代码管理视图输入框中添加了一个 Copilot 生成提交消息“闪烁”按钮。对于终端用户,现在提供了一个快速修复,可以在运行 git add... 命令后在终端中生成可编辑的提交消息。

终端代理和命令建议改进

所有终端相关功能已移至 @terminal 代理。这样做是为了明确终端代理可能不会引入工作区信息,整合功能并使其更方便使用。

以下是从旧提示到新提示的映射

@workspace /terminal how do I list files? @terminal how do I list files?
@workspace /explain #terminalSelection @terminal #terminalSelection
@workspace /explain #terminalLastCommand @terminal #terminalLastCommand

此外,命令建议在此版本中得到了显著改进。终端命令建议现在了解操作系统和使用的外壳。工作区信息也会根据 Copilot 是否认为问题与工作区相关而有条件地引入。工作区上下文收集在速度和具体引用内容方面应会得到进一步改进。

Progress is displayed while fetching workspace details

请注意此示例中 @terminal 代理如何知道在 microsoft/vscode 存储库中使用文件路径的格式

The terminal agent is capable of answering questions that need knowledge about file naming standards in the repository

还有方便的后续操作来解释建议的命令,它们以蓝色闪烁链接的形式显示在聊天输入框的正上方

The blue sparkle link just before the input box explains the suggestion

激活解释后续操作会提供建议命令的详细解释

The detailed explanation typically explains the command and each argument

在私有存储库上使用 GitHub 远程搜索功能时的身份验证升级对话框

如果为您的用户帐户启用,当您使用 @workspace 代理时,Copilot Chat 会使用远程搜索功能搜索您的工作区。为了在私有存储库上使用远程搜索,需要具有更多权限的身份验证令牌。如果尚未有具有所需权限的令牌,系统会提示您请求额外权限

Authentication dialog when searching the workspace

您只会看到此对话框一次,以后对 @workspace 代理的查询将使用缓存的令牌。

更轻松地向 @workspace 发送请求

由于 @workspace 代理用于许多 Copilot 查询,我们希望确保它尽可能容易激活。您现在可以在聊天输入框中输入问题,然后按 发送问题并自动在前面加上 @workspace

使用 Copilot 解释 Rust 代码

当您要求 Copilot Chat 解释 Rust 代码并且安装了 Rust 语言服务扩展(例如 rust-analyzer)时,它现在会从您的代码库中收集跨文件上下文。要查看 Copilot 的解释,请在活动编辑器中选择一些代码,然后使用上下文菜单中的Copilot > 解释此内容或内联聊天或聊天视图中的 /explain 命令。

Copilot > Explain This action in the editor context menu

代码块中的潜在漏洞检测

我们希望确保您了解 Copilot 生成的源代码中可能存在的任何问题,因此我们现在正在通过代码漏洞检测模型运行聊天视图代码块中的代码,并标记检测到的任何问题。您可能最初看不到此功能,但我们会逐步将其推广给 Copilot Chat 用户,并调整检测到的漏洞类型。

当确定代码块包含潜在漏洞时,将在代码块底部进行标注。漏洞检测模型是我们正在试用的模型,因此在审查 Copilot 的建议和任何潜在漏洞时,请务必自行做出最佳判断。

Copilot code vulnerability warning displayed in the Chat view

Copilot 视频和直播会话

不要错过最近在 YouTube 上的VS Code Copilot视频。了解最新的 Copilot Chat 功能以及Copilot 如何“变得更智能”

如果您还没有收看VS Code 直播,您会想观看1.84 发布派对中展示的 Copilot 演示。

Python

使用 Pylance 显示类型层次结构

使用Pylance时,您现在可以更方便地探索和导航 Python 项目的类型关系。这在处理具有复杂类型关系的大型代码库时会很有帮助。

右键单击符号时,可以选择显示类型层次结构打开类型层次结构视图。您可以从那里导航到符号的子类型和超类型。

主题:Catppuccin Macchiato(在 vscode.dev 上预览)

运行按钮菜单下的可配置调试选项

Python 调试器扩展现在在运行按钮菜单下具有可配置的调试选项。当您选择Python 调试器:使用 launch.json 进行调试并且您的工作区中存在现有的 launch.json 文件时,它会显示所有可用的调试配置,您可以从中选择一个来启动调试器。如果没有配置,系统会提示您选择一个调试配置模板,用于为您的 Python 应用程序创建 launch.json 文件。

Python Debugger: Debug using launch.json option under the Run button menu

使用环境变量激活时支持 deactivate 命令

Python 扩展有一个新的激活机制,可以在您的默认终端中激活选定的环境,而无需运行任何显式激活命令。这目前是实验性功能,可以通过以下用户设置启用:"python.experiments.optInto": ["pythonTerminalEnvVarActivation"]

然而,这种激活机制的一个最初缺点是不支持 deactivate 命令。我们收到了反馈,认为这是某些用户工作流程的重要组成部分,因此我们已添加了在所选默认终端为 PowerShell 或命令提示符时对 deactivate 的支持。我们计划将来为其他终端添加支持。

REPL Smart Send 的警告消息和设置

尝试通过 Shift+Enter 在包含无效或已弃用代码的 Python 文件上使用智能发送时,现在会出现警告消息以及禁用 REPL Smart Send 的选项。用户可以通过Python.REPL: 启用 REPLSmart Send (python.REPL.enableREPLSmartSend) 设置更改其用户和工作区特定的 REPL Smart Send 行为。

Settings editor entry for Python REPL Smart Send

测试架构重写

Python 测试适配器重写实验已推广到 100% 的用户。目前,您可以通过在 settings.json 中添加 "python.experiments.optOutFrom" : "pythonTestAdapter" 来选择退出,但我们很快将取消此实验性标志并采用这种新架构。

GitHub 拉取请求和问题

GitHub 拉取请求和问题扩展已取得更多进展,该扩展允许您处理、创建和管理拉取请求和问题。

  • PR 描述和创建视图现在支持合并队列。
  • 新的设置 "githubPullRequests.allowFetch": false 可阻止运行 fetch
  • 改进了子模块支持。

请查看此扩展的 0.78.0 版本更新日志,了解其他亮点功能。

预览功能

树视图中的 Sticky Scroll

基于编辑器中 Sticky Scroll 的成功经验,我们将此功能扩展到了所有树视图,使用户可以更轻松地浏览项目树。可以通过设置 workbench.tree.enableStickyScroll: true 来启用树视图的 Sticky Scroll。为了确保 Sticky Scroll 不占用过多空间,它最多只能占用视图高度的 40%。此外,用户可以通过配置 workbench.tree.stickyScrollMaxItemCount 来自定义 Sticky Scroll 显示的最大项目数,此设置默认为 7。

为了改进树视图的导航体验,您可以选择 Sticky Scroll 中的一个项目,直接跳转到树视图中的对应位置,或者点击父项目的箭头来隐藏其所有子项目。此外,启用 Sticky Scroll 后,访问复选框和操作项也更方便。

多文件差异编辑器

此版本提供了多文件差异编辑器的预览。多文件差异编辑器允许您在一个可滚动的视图中查看多个文件的更改

要启用多文件差异编辑器,请设置 "multiDiffEditor.experimental.enabled": true。目前,多文件差异编辑器可用于查看本地更改、暂存的更改、传入/传出更改以及拉取请求中的更改。请注意,多文件差异编辑器尚未完全具备所有功能,并且可能在所有场景下都无法正常工作。

韩语的替代字符过滤

工作台中使用了过滤功能的多个特性,VS Code 现在也会搜索其 QWERTY 键盘等效项,因为用户常常会忘记切换输入法 (IME)。这类似于搜索引擎的工作方式,但它是实时进行的。例如,在韩语输入法下输入 debug 会变成 ㅇ듀ㅕㅎ,这是没有意义的。

Searching for a "ㅇ듀ㅕㅎ" command will now present results for "debug"

目前,从单词中间开始过滤时此功能不起作用。

隐藏问题装饰

有一个新设置可以隐藏编辑器和工作台中的问题装饰(不包括“问题”视图)。设置 Problems: Visibility (problems.visibility) 默认启用,以显示所有问题。

Problems: Visibility 关闭时,部分“问题”UI 设置将被禁用

  • 大纲 > 问题:徽章 (outline.problems.badges)
  • 大纲 > 问题:颜色 (outline.problems.colors)
  • 大纲 > 问题:启用 (outline.problems.enabled)
  • 问题 > 装饰:启用 (problems.decorations.enabled)

Problems: Visibility 关闭时,状态栏会显示警告。

Problems: Visibility off Status Bar item and hover

提议的 API

每个里程碑版本都会带来新的提议 API,扩展作者可以试用它们。一如既往,我们期待您的反馈。以下是试用提议 API 的步骤:

  1. 找到您想尝试的提议,然后将其名称添加到 package.json#enabledApiProposals 中。
  2. 使用最新的 @vscode/dts 并运行 npx @vscode/dts dev。它将下载相应的 d.ts 文件到您的工作区。
  3. 现在您可以针对该提议进行编程了。

您不能发布使用提议 API 的扩展。下一个版本可能存在重大更改,我们不希望破坏现有的扩展。

测试覆盖率

在本次迭代中,我们恢复了测试覆盖率相关的工作,包括初步的 UI 集成以及对长期提议的一些小更新。虽然 API 过长,无法在此处详细列出,但我们认为它相当简单明了,欢迎您在问题 #123713 中提供关于此提议的意见。

聊天代理

正如我们最近的博客文章 在 VS Code 中追求“卓越的智能” 中提到的,我们正在开发一种模型,允许扩展为 Copilot Chat 视图贡献聊天代理。聊天代理 API 尚处于提议阶段,但您现在可以尝试添加自己的聊天代理。请订阅问题 #199908 以获取更新。

多文档高亮 API

如前一个版本中所述,VS Code 现在支持多文档高亮。在此次迭代中,我们新增了一个提议的 MultiDocumentHighlightProvider API,用于注册多文档高亮提供程序。这增加了为特定编程语言提供语义出现高亮的功能。提供程序会返回一个新的 MultiDocumentHighlight 结构,其中包含从 URI 映射到 DocumentHighlight 的 Map。可以通过问题 #196354 跟踪反馈和后续更新。

工程方面

新的 CDN

我们正在将部署推广到一个新的 CDN 端点:vscode.download.prss.microsoft.com。对于系统管理员,请务必配置网络规则以允许来自此端点的流量。

macOS 10.13 和 10.14 支持已终止

VS Code 1.85 是最后一个支持 macOS 10.13 (macOS High Sierra) 和 10.14 (macOS Mojave) 的版本。请参阅我们的常见问题以获取更多信息。

值得关注的修复

  • 195796 本地化后无法在设置编辑器中搜索文本
  • 197319 vscode://file// 链接不再工作
  • 194094 鼠标移出配置文件图标选择器时不要将其关闭
  • 197070 支持将调试工具栏定位到自定义标题栏上

感谢

最后但同样重要的是,衷心感谢 VS Code 的贡献者们。

问题跟踪

对我们的问题跟踪的贡献

拉取请求

vscode 的贡献

vscode-css-languageservice 的贡献

vscode-pull-request-github 的贡献