2020年10月(版本1.51)

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

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


欢迎来到2020年10月发布的Visual Studio Code。正如10月迭代计划中所宣布的,我们专注于根据我们的问题整理指南中记录的GitHub问题和拉取请求的整理工作。

我们还与GitHub的合作伙伴在GitHub Codespaces上进行了合作,结果比最初预期的要复杂。为此,我们将在11月的迭代中继续进行部分整理工作。

在这个重要的维护里程碑期间,我们还处理了几个功能请求和社区的拉取请求。继续阅读以了解新功能和设置。

工作台

更显眼的固定标签页

固定的标签现在即使在不活动时也会始终显示其固定图标,以便更容易识别。如果编辑器既被固定又包含未保存的更改,图标将反映这两种状态。

显示固定标签页图标的非活动固定标签页

扩展树使用自定义悬停

我们现在使用自定义的悬停提示,而不是在扩展树视图中使用原生工具提示,这样可以保持跨平台的一致性,并更好地适应整体用户体验。

自定义树悬停

安装扩展而不进行同步

现在,您可以在启用设置同步的情况下安装扩展程序而无需同步它。

安装扩展程序而不进行同步

主题: GitHub Light

从资源管理器安装扩展

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

输入模糊命令

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

集成终端

本地回显

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

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

显示250ms延迟输入的Gif动画,其中立即输入的字符会变暗

有两个设置可以用来配置这个:

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

智能感知

可调整大小的建议

在这个里程碑中,我们对建议的用户界面进行了几项改进。首先,它现在可以调整大小。拖动边或角来调整控件的大小。

可调整大小的建议控件

主题: GitHub Light, 字体: FiraCode

建议列表的大小将在会话之间保存和恢复。详细信息窗格的大小仅在每个会话中保存,因为该大小往往更具可变性。此外,editor.suggest.maxVisibleSuggestions 设置已过时。

建议的状态栏

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

建议状态栏

主题: GitHub Light, 字体: FiraCode

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

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

移动光标以选择建议

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

显示建议时移动光标

主题: GitHub Light

Emmet

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

Emmet自定义片段再次工作

源代码控制

源代码控制输入框保存提交消息历史

这解决了一个功能请求,用于导航SCM提交历史。按下 (Windows, Linux Up) (Windows, Linux Down) 分别显示上一个和下一个提交。要直接移动到输入框的第一个和最后一个位置,请按下Alt 键与相应的箭头键一起使用。

在SCM输入框中输入消息后,暂存并提交更改,按上箭头显示刚刚提交的消息

Git: 子菜单中的标签命令

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

Git标签子菜单

Git: Rebase 命令

新增了一个Git: Rebase branch...命令,允许你通过用户界面来变基一个分支。

Git: 递归克隆命令

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

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

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

时间线视图带表情符号

语言

Markdown 智能选择

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

  • 扩展:⌃⇧⌘→ (Windows, Linux Shift+Alt+Right)
  • 缩小选择范围: ⌃⇧⌘← (Windows, Linux Shift+Alt+Left)

选择适用于以下内容,并遵循传统的层次结构模式:

  • 头部信息
  • 列表
  • 块引用
  • 围栏代码块
  • HTML代码块
  • 段落

在Markdown文档中的智能选择从一个块元素扩展到包含它的块元素,再到标题下的其余内容,最后到标题本身

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 现在可以从文件资源管理器中提供文件夹的下载操作,将所有文件和文件夹下载到磁盘。

下载文件夹

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

打开工作区通知

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

打开工作区通知

防止意外关闭

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

可能的值为:

  • keyboardOnly 确认仅在使用键绑定关闭时显示(例如,⌘W (Windows, Linux Alt+F4))。(默认)
  • always: 确认对话框将始终显示,即使您通过鼠标手势关闭。
  • never: 确认将永远不会显示。

关闭确认对话框

注意: 此设置可能无法覆盖所有情况。浏览器仍可能在不确认的情况下关闭标签页或窗口。

对扩展的贡献

GitHub 拉取请求和问题

工作仍在继续在GitHub Pull Requests and Issues扩展上,该扩展允许您处理、创建和管理拉取请求和问题。

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

远程开发

工作仍在继续在远程开发扩展上,这些扩展允许您使用容器、远程机器或Windows Subsystem for Linux (WSL) 作为全功能的开发环境。

1.51版本的功能亮点包括:

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

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

预览功能

预览功能尚未准备好发布,但功能足够使用。我们欢迎您在开发过程中提供早期反馈。

设置同步

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

记住代理凭证

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

代理登录

主题: 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 的夜间构建版本,只需安装 TypeScript Nightly 扩展。请分享反馈,并告诉我们您在使用 TypeScript 4.1 时是否遇到任何错误。

扩展开发

更新的扩展示例

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

Webview样式示例

树中的Codicon颜色

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

树视图与图标颜色

同步全局状态

扩展现在可以通过提供键来同步它们的全局状态,当启用设置同步时,这些键的值应该被同步,使用在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;

评论线程回复按钮可见性

Comment 扩展现在可以通过一个新的属性 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符合Trusted Types标准

我们继续努力使VS Code符合“可信类型”标准。目标是防止基于DOM的跨站脚本漏洞。您可以在web.dev的可信类型网站上了解更多关于可信类型的信息,并在问题#103699中关注我们的进展。

文档

入门指南

我们正在专注于使编辑器更容易上手的方法。我们在我们的网站上创建了一个新的“学习编程”登陆页面,其中包含针对编程新手的编码包和新内容。我们还在code.visualstudio.com/learn上创建了新的适合学生的视频和资源。

学习编程

新命令

Key Command Command ID
Focus Left Editor Group (do not wrap around) workbench.action.focusLeftGroupWithoutWrap
Focus Right Editor Group (do not wrap around) workbench.action.focusRightGroupWithoutWrap
Focus Above Editor Group (do not wrap around) workbench.action.focusAboveGroupWithoutWrap
Focus Below Editor Group (do not wrap around) workbench.action.focusBelowGroupWithoutWrap
Focus Activity Bar workbench.action.focusActivityBar

显著的修复

  • 43819: Windows: 当删除一个包含正在使用的文件的文件夹时,没有显示错误信息
  • 71315: 删除文件后应保持行焦点
  • 96522: 在多根工作区中,用户输入变量不适用于启动配置
  • 100255: 移动文件时应直接加载其之前内容的模型
  • 108578: 在v1.50中,具有onDebugDynamicConfigurations的扩展在启动时会被急切激活
  • 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 的贡献: