现已推出!阅读 10 月份的更新内容,了解新功能和修复。

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 月份的迭代中的一部分时间内进行问题整理工作。

在此问题整理里程碑期间,我们还解决了几个功能请求和社区 拉取请求。继续阅读以了解有关新功能和设置的更多信息。

工作区

更突出的固定标签

固定标签现在将始终显示其固定图标,即使处于非活动状态,以使它们更容易识别。如果编辑器同时被固定且包含未保存的更改,则图标将反映这两种状态。

Inactive pinned tabs showing pin icons

扩展树使用自定义悬停

我们现在使用自定义悬停而不是在扩展树视图中使用原生工具提示,它在跨平台上保持一致,并且更适合整体用户体验。

Custom tree hover

在不同步的情况下安装扩展

您现在可以在设置同步启用时在不同步的情况下安装扩展。

Install extension without syncing

主题:GitHub 浅色主题

从资源管理器安装扩展

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 浅色主题,字体:FiraCode

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

建议的状态栏

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

Suggestions Status Bar

主题:GitHub 浅色主题,字体:FiraCode

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

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

移动光标以选择建议

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

Moving cursor while suggestions are showing

主题:GitHub 浅色主题

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 版本的完整变更日志

远程开发

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

1.51 版本中的主要功能包括

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

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

预览功能

预览功能尚未准备好发布,但功能足够强大,可以供您使用。欢迎您在开发过程中尽早提供反馈。

设置同步

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

记住代理凭据

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

Proxy Login

主题:GitHub 浅色主题

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

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

请启用此选项,如果您发现某些功能无法正常工作,请通过我们的 问题跟踪器 告诉我们。

TypeScript 4.1 beta 支持

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

要开始使用 TypeScript 4.1 夜间构建版本,只需安装 TypeScript Nightly 扩展。请分享您的反馈,如果您遇到任何与 TypeScript 4.1 相关的错误,请告诉我们。

扩展开发

更新的扩展示例

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

Webview style samples

树中的 Codicon 颜色

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

Tree view with icon colors

同步全局状态

扩展现在可以通过提供键来同步其全局状态,这些键的值在启用设置同步时应该同步,使用 globalState 备忘录中新引入的 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 事件向编辑器发出信号,表明折叠范围需要更新。

有关更多详细信息并提供反馈,请使用 问题 #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 符合“Trusted Types”。目标是防止基于 DOM 的跨站点脚本漏洞。您可以在 web.dev 的 Trusted Types 网站 上了解更多关于 trusted types 的信息,并在 问题 #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 的贡献