在 VS Code 中试试 吧!

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

扩展树使用自定义悬停

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

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

在上面的示例中,选择“Insert”会产生 Math.floorceil,选择“Replace”会产生 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: Rebase branch...,允许您使用 UI 对分支进行变基。

Git:递归克隆命令

使用 Git: Clone (Recursive) 命令,您现在可以递归克隆 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 版本的功能亮点包括:

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

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

预览功能

预览功能尚未准备好发布,但已足够可用。在这些功能开发期间,我们欢迎您的早期反馈。

设置同步

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

记住代理凭据

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

Proxy Login

主题:GitHub Light

该对话框将出现在 VS Code 窗口内,并提供记住凭据的方法,以便您每次启动 VS Code 时无需再次提供它们。凭据将存储在操作系统的标准凭据存储中(macOS 上的钥匙串,Windows 上的 Windows 凭据管理器,以及 Linux 上的 gnome keyring)。

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

请启用此选项,如果遇到任何问题,请通过我们的问题跟踪器告知我们。

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 的最终确定,扩展作者可以在自定义树视图中使用主题颜色来渲染 codicons。

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 的贡献