现已推出!了解 11 月的新功能和修复。

2020 年 10 月(版本 1.51)

更新 1.51.1:此更新解决了这些问题

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


欢迎来到 Visual Studio Code 2020 年 10 月的发布版本。正如在10 月迭代计划中宣布的那样,我们专注于处理 GitHub 问题和拉取请求,如我们的问题整理指南中所述。

我们还与 GitHub 的合作伙伴合作开发 GitHub Codespaces,最终涉及的工作比最初预期的要多。为此,我们将在 11 月迭代的部分工作中继续进行内部整理。

在此内部整理里程碑中,我们还解决了几个功能请求和社区拉取请求。继续阅读以了解新功能和设置。

工作台

更突出的固定选项卡

固定选项卡现在始终显示其固定图标,即使在不活动状态下也是如此,以便更容易识别它们。如果编辑器既已固定又包含未保存的更改,则该图标会反映这两种状态。

Inactive pinned tabs showing pin icons

扩展树使用自定义悬停

我们现在使用自定义悬停,而不是在扩展树视图中使用本机工具提示,该悬停是跨平台一致的,并且更适合整体 UX。

Custom tree hover

安装扩展而不进行同步

现在,您可以在启用设置同步时安装扩展,而无需同步它。

Install extension without syncing

主题:GitHub Light

从资源管理器安装扩展

VS Code 现在支持从资源管理器安装扩展 VSIX 文件,方法是右键单击 VSIX 文件并选择“安装扩展 VSIX”上下文菜单项。

输入模糊命令

现在可以使用新的内部 workbench.action.blur 命令,该命令会删除任何可聚焦输入的焦点。您可以在键盘快捷方式首选项中为此命令分配键盘快捷方式。

集成终端

本地回显

传统上,在终端中进行修改需要将信息发送到终端进程,进行处理,然后再返回到 VS Code 才能生效。当在与SSH 服务器Codespace的连接不良或距离较远时,这可能会很慢。

此版本为终端添加了“本地回显”模式,该模式尝试预测本地进行的修改和光标移动,并在 UI 中显示它们,而无需往返于服务器。默认情况下,预测的字符显示为“变暗”

Gif showing typing with 250ms latency where characters entered immediately are dimmed

您可以使用两个设置来配置此功能

  • terminal.integrated.localEchoLatencyThreshold 配置检测到的延迟阈值(以毫秒为单位),本地回显将在该阈值激活。 可以将其设置为 0 以始终启用该功能,或设置为 -1 以禁用该功能。默认为 30
  • terminal.integrated.localEchoStyle 配置本地字符的样式或颜色,默认为 dim

IntelliSense

可调整大小的建议

在这个里程碑中,我们对建议 UI 进行了多项改进。首先,它现在可以调整大小。拖动侧面或角部即可调整控件的大小。

Resizable Suggestions control

主题:GitHub Light,字体:FiraCode

建议列表的大小将在会话之间保存和还原。详细信息窗格的大小仅按会话保存,因为该大小往往更易变。此外,editor.suggest.maxVisibleSuggestions 设置已过时。

建议的状态栏

建议控件现在还可以在窗口底部显示自己的状态栏。使用 editor.suggest.showStatusBar 设置启用它。它使切换详细信息变得更简单,并显示完成是否支持插入、替换或两者。

Suggestions Status Bar

主题:GitHub Light,字体:FiraCode

在上面的示例中,选择“插入”会导致 Math.floorceil,而选择“替换”会导致 Math.floor

新的 editor.suggest.insertMode 设置允许您配置您是喜欢插入还是替换。当建议同时支持两者时,您的偏好将是默认值。

移动光标以选择建议

最后但并非最不重要的一点是,您现在可以在显示建议时移动光标。例如,您可以在单词末尾触发建议,向左移动以查看更多建议,然后使用替换来覆盖该单词。

Moving cursor while suggestions are showing

主题:GitHub Light

Emmet

Emmet 中的自定义代码片段已回归。此外,代码片段现在会在保存代码片段文件或更新 emmet.extensionsPath 设置后自动刷新。

Emmet custom snippets working again

源代码管理

源代码管理输入框保存提交消息历史记录

这解决了导航 SCM 提交历史记录的功能请求。按 (Windows、Linux Up(Windows、Linux Down 以分别显示上一次和下一次提交。要直接移动到输入框的第一个和最后一个位置,请按住 Alt 并结合相应的箭头键。

After typing a message in the SCM input box, then staging and committing changes, pressing the up arrow reveals the message that was just committed

Git:子菜单中的标记命令

与标记相关的 Git 命令已添加到“...”Git 菜单中。

Git tags submenu

Git:变基命令

已添加新的 Git:变基分支... 命令,该命令允许您使用 UI 对分支进行变基。

Git:递归克隆命令

使用 Git:克隆(递归)命令,您现在可以递归克隆 Git 存储库,包括其嵌套的 Git 子模块。

时间线:表情符号短代码渲染

我们现在在时间线视图中渲染表情符号短代码,例如 :smile:

Timeline view with emoji

语言

Markdown 智能选择

使用以下新命令在 Markdown 文档中展开和收缩选择

  • 展开:⌃⇧⌘→(Windows、Linux Shift+Alt+Right
  • 收缩:⌃⇧⌘←(Windows、Linux Shift+Alt+Left

选择应用于以下内容,并遵循传统的分层模式

  • 标题
  • 列表
  • 块引用
  • 围栏代码块
  • Html 代码块
  • 段落

Smart select within a Markdown document expands from a block element, to the block element containing it, to the rest of the content under a header, to the header itself

用于 JavaScript 和 TypeScript 的空大括号格式化选项

新的 javascript.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBracestypescript.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces 格式化配置选项控制是否在空大括号之间插入空格。这些设置的默认值为 true。例如,对于 JavaScript

class Foo {
    doFoo() { }
}

设置 "javascript.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces": false 并格式化代码会导致

class Foo {
    doFoo() {} // Notice that the space has been removed
}

浏览器支持

下载文件夹(Edge、Chrome)

利用新的 文件系统访问 API,在浏览器中运行的 VS Code 现在可以提供从文件资源管理器下载文件夹的操作,以将所有文件和文件夹下载到磁盘。

Download folder

注意:这需要最新版本的 Microsoft Edge 或 Google Chrome。

打开工作区通知

如果您打开一个在顶层包含 .code-workspace 文件的文件夹,您现在会看到一条通知,要求您打开它。这在 VS Code 的桌面版中始终如此,现在也可以在浏览器中使用。

Open workspace notification

防止意外关闭

添加了新的设置 window.confirmBeforeClose,用于在关闭或离开工作台之前显示确认对话框。

可能的值是

  • keyboardOnly:仅当您使用键盘快捷方式关闭(例如,⌘W(Windows、Linux Alt+F4)时,才会显示确认对话框。(默认)
  • always:始终显示确认对话框,即使您从鼠标手势关闭也是如此。
  • never:永远不会显示确认对话框。

Close confirmation dialog

注意:此设置可能不涵盖所有情况。浏览器仍然可能会在没有确认的情况下决定关闭选项卡或窗口。

对扩展的贡献

GitHub 拉取请求和问题

继续开发GitHub 拉取请求和问题扩展,该扩展允许您处理、创建和管理拉取请求和问题。

要了解所有新功能和更新,您可以查看该扩展的 0.21.0 版本的完整更新日志

远程开发

继续开发远程开发扩展,该扩展允许您使用容器、远程计算机或适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。

1.51 中的功能亮点包括

  • 能够持久化/重新连接到终端会话。
  • 改进的端口转发体验。

您可以在远程开发发行说明中了解新的扩展功能和错误修复。

预览功能

预览功能尚未准备好发布,但功能足够强大,可以使用。我们欢迎您在它们仍在开发中时提供早期反馈。

设置同步

设置同步现在同步扩展的全局状态。扩展将必须使用新引入的setKeysForSync API 提供要同步的状态。

记住代理凭据

我们正在彻底修改在网络连接需要使用代理进行身份验证时显示的登录对话框。新的设置 window.enableExperimentalProxyLoginDialog: true 将启用此新体验,我们计划在未来的版本中将其设为默认设置。

Proxy Login

主题:GitHub Light

该对话框将出现在 VS Code 窗口内,并提供记住凭据的方式,这样您就不必每次启动 VS Code 时都提供凭据。凭据将存储在操作系统标准凭据存储中(macOS 上的钥匙串、Windows 上的 Windows 凭据管理器以及 Linux 上的 gnome 密钥环)。

我们仍然只在每个会话中显示此对话框一次,但将来可能会重新考虑此决定。如果您选择记住的凭据无效,您将再次看到该对话框出现。再次提供凭据允许您更改它们。

请启用此选项,并通过我们的问题跟踪器告诉我们是否有任何问题未按预期工作。

TypeScript 4.1 beta 支持

VS Code 支持TypeScript 4.1 beta 和 nightly 构建。4.1 更新带来了一些新的 TypeScript 语言特性,例如支持递归条件类型,以及工具方面的改进。一个重点领域是为 JSDoc 注释中的 @see 标签添加初始支持

要开始使用 TypeScript 4.1 nightly 构建,只需安装TypeScript Nightly 扩展。请分享反馈,并告知我们您在使用 TypeScript 4.1 时遇到的任何错误。

扩展编写

更新的扩展示例

我们更新了一些扩展示例,以包含已连接到我们颜色主题令牌的 VS Code 默认样式。这意味着常用元素(文本、按钮、输入)将是可主题化的,并与产品中的默认样式匹配。以下是包含此功能的扩展:

Webview style samples

树中的 Codicon 颜色

随着ThemeIcon 颜色 API的最终确定,扩展作者可以在自定义树视图中的 codicon 上使用主题颜色。

Tree view with icon colors

同步全局状态

现在,扩展可以使用 globalState memento 中新引入的 setKeysForSync API,通过提供在启用设置同步时应同步其值的键来同步其全局状态。

/**
 * Set the keys whose values should be synchronized across devices when synchronizing user-data
 * like configuration, extensions, and mementos.
 *
 * Note that this function defines the whole set of keys whose values are synchronized:
 *  - calling it with an empty array stops synchronization for this memento
 *  - calling it with a non-empty array replaces all keys whose values are synchronized
 *
 * For any given set of keys this function needs to be called only once but there is no harm in
 * repeatedly calling it.
 *
 * @param keys The set of keys whose values are synced.
 */
setKeysForSync(keys: string[]): void;

评论线程回复按钮可见性

评论 扩展现在可以使用新属性 CommentThread#canReply 控制评论线程中回复按钮的可见性。当它设置为 false 时,用户将不会在评论线程中看到回复按钮或评论框。

建议的扩展 API

每个里程碑都附带新的提议 API,扩展作者可以尝试使用它们。和往常一样,我们希望得到您的反馈。以下是您尝试使用提议 API 需要执行的操作:

  • 您必须使用 Insiders 版本,因为提议的 API 会频繁更改。
  • 您必须在扩展的 package.json 文件中包含以下行:"enableProposedApi": true
  • vscode.proposed.d.ts 文件的最新版本复制到您项目的源位置。

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

折叠范围提供程序更改事件

折叠范围提供程序可以使用 onDidChangeFoldingRanges 事件向编辑器发出需要更新折叠范围的信号。

有关更多详细信息和提供反馈,请使用issue #108929

密码 API

作为身份验证提供程序持续工作的一部分,我们引入了用于存储和检索敏感信息的 API。在内部,它充当 VS Code 用于存储密钥的 keytar 库的包装器。

/**
 * Retrieve a password that was stored with key. Returns undefined if there
 * is no password matching that key.
 * @param key The key the password was stored under.
 */
export function getPassword(key: string): Thenable<string | undefined>;

/**
 * Store a password under a given key.
 * @param key The key to store the password under
 * @param value The password
 */
export function setPassword(key: string, value: string): Thenable<void>;

/**
 * Remove a password from storage.
 * @param key The key the password was stored under.
 */
export function deletePassword(key: string): Thenable<void>;

/**
 * Fires when a password is set or deleted.
 */
export const onDidChangePassword: Event<void>;

工程

使 VS Code 符合可信类型

我们一直在努力使 VS Code 符合“可信类型”。目标是防止基于 DOM 的跨站点脚本漏洞。您可以在 web.dev 可信类型站点上了解有关可信类型的更多信息,并在 issue #103699 中关注我们的进度。

文档

入门指南

我们正在专注于让编辑器的入门变得更容易。我们在我们的网站上创建了一个新的“学习编码”着陆页,其中包含面向编码新手推出的编码包和新内容。我们还在 code.visualstudio.com/learn 网站上创建了新的学生友好视频和资源。

Learn to code

新命令

快捷键 命令 命令 ID
聚焦左侧编辑器组(不循环) workbench.action.focusLeftGroupWithoutWrap
聚焦右侧编辑器组(不循环) workbench.action.focusRightGroupWithoutWrap
聚焦上方编辑器组(不循环) workbench.action.focusAboveGroupWithoutWrap
聚焦下方编辑器组(不循环) workbench.action.focusBelowGroupWithoutWrap
聚焦活动栏 workbench.action.focusActivityBar

值得注意的修复

  • 43819:Windows:删除正在使用的包含文件的文件夹时,不显示错误消息
  • 71315:删除文件后应保持行焦点
  • 96522:用户输入变量在多根工作区中不适用于启动配置
  • 100255:移动文件应直接加载其之前的内容模型
  • 108578:具有 onDebugDynamicConfigurations 的扩展在 v1.50 中会在启动时被积极激活
  • 109088:为文件夹发送 vscode.workspace.onWillCreateFiles/onDidCreateFiles 事件
  • 109226:调试悬停在展开/折叠时移动

感谢

最后但同样重要的是,非常感谢以下在本月为 VS Code 做出贡献的人员

对我们的问题跟踪的贡献

vscode 的贡献

vscode-json-languageservice 的贡献

vscode-html-languageservice 的贡献

vscode-css-languageservice 的贡献

vscode-eslint 的贡献

language-server-protocol 的贡献

vscode-emmet-helper 的贡献

lsif-node 的贡献

debug-adapter-protocol 的贡献

vscode-vsce 的贡献

vscode-js-debug 的贡献