参加你附近的 ,了解 VS Code 中的 AI 辅助开发。

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

在上面的示例中,选择“插入”会得到 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:Rebase 命令

添加了一个新的 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 Pull Requests and Issues扩展仍在继续开发中,该扩展允许您处理、创建和管理拉取请求和问题。

要了解所有新功能和更新,您可以查看扩展的 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 和每晚构建。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 符合受信任类型

我们继续努力使 VS Code 符合“受信任类型”。目标是防止基于 DOM 的跨站点脚本漏洞。您可以在 web.dev 受信任类型站点上了解有关受信任类型的更多信息,并在 问题 #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: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 的贡献

© . This site is unofficial and not affiliated with Microsoft.