现已发布!阅读关于 11 月新增功能和修复的内容。

2020 年 11 月(版本 1.52)

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

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


欢迎使用 Visual Studio Code 2020 年 11 月版本。正如我们在 11 月迭代计划 中宣布的那样,我们继续花了两个星期时间专注于 GitHub 问题的整理和拉取请求,这在我们的 问题整理指南 中有所记录。在所有 VS Code 存储库中,我们关闭了(要么分类,要么修复)5242 个问题,甚至比我们在 2019 年 10 月 的上一次整理迭代中关闭的 4622 个问题还要多。在我们关闭问题的同时,您又创建了 2937 个新问题。主要的 vscode 存储库 现在有 2146 个未解决的功能请求和 884 个未解决的错误。此外,我们关闭了 144 个拉取请求。

和往年一样,我们使用了 Benjamin Lannon实时跟踪器 来跟踪我们的进度。

Burn down chart of VS Code issues

在专注于整理工作之后,我们还解决了几个功能请求和社区 拉取请求。这带来了许多新功能和设置,其中一些主要亮点包括:

工作台

预览编辑器改进

根据用户反馈,我们对处理 预览编辑器 的方式进行了一些更新。

workbench.editor.enablePreviewFromQuickOpen 设置现在默认禁用,因此从快速打开打开的编辑器将不再以预览模式显示。

当您开始代码导航(例如,使用转到定义)时,您开始的编辑器将退出预览模式并保持打开状态,而新编辑器将处于预览模式,直到您进一步导航。

Go to Definition

我们更改了所有自定义树(例如,用于扩展或 Git 视图中的那些)以使其与内置树(例如,文件资源管理器)的工作方式更加一致。这意味着,以下交互现在适用于所有这些树:

  • 双击或鼠标中键单击以非预览模式打开。
  • Enter 以非预览模式打开(Space 以预览模式打开)。
  • Alt+Click 在活动编辑器旁边打开一个编辑器。

注意: 如果您是使用我们的自定义树 API 的扩展作者,您也会受益于此更改。请确保使用 vscode.openvscode.diff 命令作为 TreeItem.command 以获取新的预览模式行为。

编辑器溢出菜单中的新菜单项保持编辑器打开允许您完全关闭预览编辑器。

Selecting Keep Editors Open in the overflow menu

恢复以前的会话窗口

现有 window.restoreWindows 设置的新值 preserve 允许您强制在重新启动 VS Code 时恢复您在关闭 VS Code 之前打开的每个窗口,即使明确要求 VS Code 打开特定文件夹或文件。一个常见的例子是在平台的资源管理器中双击文件以在 VS Code 中打开它,或者使用终端打开特定文件或文件夹。如果没有 window.restoreWindows: preserve 设置,VS Code 将只按指示打开文件或文件夹,而不恢复任何其他窗口。

禁用拖放时拆分编辑器组

新设置 workbench.editor.splitOnDragAndDrop 可防止在使用拖放编辑器时拆分编辑器组。还有一种方法可以在拖放操作期间通过按住 Shift 键 (macOS) 或 Alt 键 (Windows, Linux) 有条件地切换此功能。

资源管理器中撤消文件操作

文件资源管理器现在支持所有文件操作的撤消重做:删除、重命名、复制、移动、新建文件和新建文件夹。确保焦点在文件资源管理器中,然后触发撤消重做命令,您上次的文件操作将分别被撤消或重做。请记住,我们为编辑器和文件资源管理器设置了单独的撤消堆栈,我们根据焦点选择要撤消的堆栈。

Selecting undo from the Edit menu while in the Explorer

资源管理器中长时间运行操作的进度

我们现在在文件资源管理器和状态栏中显示长时间运行的文件操作(超过 500 毫秒)的进度。还初步支持取消长时间运行的操作。当复制大文件夹或从远程位置下载资源时,这应该很有帮助。

Showing progress in the File Explorer

打开编辑器排序

有一个新设置 explorer.openEditors.sortOrder 用于控制打开编辑器列表中的排序顺序。

值是:

  • editorOrder - 编辑器按编辑器标签页显示的顺序排列(默认)。
  • alphabetical - 编辑器在每个编辑器组内按字母顺序排列。

alphabetical 排序只会影响“打开编辑器”视图 - 它不会以任何方式“移动标签页”。

当您打开许多文件并希望将相关文件(例如,hello.component.js 和 hello.component.html)匹配起来时,这可能会有所帮助。

Open Editors sorted

可访问的进度控制

工作台进度显示已变得更易于访问。VS Code 设置了适当的 ARIA 角色,以便屏幕阅读器可以报告 VS Code 中所有长时间运行的操作的进度。默认情况下,大多数屏幕阅读器只会在进度持续超过 10 秒时才宣布进度。

源代码管理更改显示其父文件夹路径

从“源代码管理”视图打开的差异编辑器现在将显示其文件路径(当标签页禁用时)。以前只显示文件名,但现在如果前后文件在同一文件夹中,则会显示父文件夹。

SCM changes showing parent folder path

默认启用新的代理登录对话框

我们的新代理登录对话框现在默认启用。您可以阅读我们的 以前的版本说明 以了解更多详细信息。设置 window.enableExperimentalProxyLoginDialog 可用于启用旧对话框,但我们将在不久的将来移除此支持。如果您发现新登录对话框有问题,请通过提交 问题 告知我们。

改进的终端环境处理 (Linux, macOS)

当您通过 dock 或启动器(而不是终端)第一次在 Linux 或 macOS 上启动 VS Code 时,VS Code 会启动一个后台进程来解析您的 shell 环境(由 .bashrc.zshrc 定义或更改)。然后,VS Code 使用所有检测到的环境变量,因此从终端或 dock/启动器启动没有任何区别,这在调试或执行任务时很重要。

不幸的是,在后台进程执行完毕之前,VS Code 不会打开。为了不阻塞启动太久,VS Code 会在 10 秒后开始打开。在这种情况下,VS Code 现在会通知您它无法解析 shell 环境,并提供一个链接以了解更多信息。

Shell environment error after being unable to resolve in a reasonable time

同样,VS Code 现在会在三秒后显示警告,指示 VS Code 启动被解析 shell 环境阻塞。

Shell environment warning if it takes longer than 3 seconds

我们正在积极研究更改我们的策略,即不阻止 VS Code 启动,同时仍在后台解析 shell 环境,但这只有在未来的里程碑中才有可能实现。

此区域中其他值得注意的更改是:

  • 您现在可以在启动第二个 VS Code 窗口之前从终端定义和更改环境变量,这些变量将正确覆盖第一次启动时的变量,从而有效地允许按窗口设置环境变量(例如,这使您能够在启动前通过 nvm 等工具更改每个窗口的 Node.js 版本)。
  • 即使您在第二个窗口中切换文件夹,在启动第二个 VS Code 窗口之前从终端设置的环境变量现在也会保留。

改进的工作台溢出

当没有足够的空间来容纳工作台中的所有视图时,VS Code 现在将显示滚动条来平移内容,让您可以访问所有内容。这适用于工作台中的多个区域,例如侧边栏、编辑器网格等。

Improved workbench overflow

Sash 悬停边框颜色

您现在可以自定义工作台中 sashes (sash.hoverBorder) 的边框悬停颜色。

Sash hover border color

树:展开模式

新设置 workbench.tree.expandMode 允许您控制文件夹在树中展开的方式:使用单次单击或双击。

macOS Big Sur 更新

由于 Electron 9 的问题,当您选择重新启动以更新时,VS Code 不会自动重新启动,而是简单地退出。在下一个 VS Code 版本(应包括 Electron 11)之前,发生这种情况时必须手动重新启动 VS Code。在 issue #109728 中阅读更多内容。

源代码管理

保留源代码管理视图状态

源代码管理视图状态现在在会话之间保留。即使在退出并重新启动 VS Code 后,折叠的树节点也将保持折叠状态。

源代码管理行号操作

新设置 scm.diffDecorationsGutterAction 允许您控制单击编辑器左侧的源代码管理行号装饰时发生的情况。可能的值是:

  • diff - 单击时打开内联差异预览视图(默认)。
  • none - 禁用任何操作。

Git:新命令

已向命令面板添加了几个新 Git 命令:

  • Git: Cherry Pick... - 将特定提交拣选到您的分支。
  • Git: Rename - 对活动文件执行 git 重命名。
  • Git: Push Tags - 将所有本地标签推送到远程。
  • Git: Checkout to (Detached)... - 以分离模式执行签出。

Git:新设置

此外,还添加了新 Git 设置:

  • git.pruneOnFetch - 使 VS Code 在获取远程引用时运行 git fetch --prune
  • git.ignoreSubmodules - 您现在可以确保 VS Code 忽略子模块存储库中的更改,这在大型 monorepos 中很有用。
  • git.openAfterClone - 控制克隆 git 存储库后是否以及如何打开文件夹:在当前窗口、在新窗口中、在未打开文件夹时以及通过提示用户。
  • git.useCommitInputAsStashMessage - 运行 Git: Stash 时,使 VS Code 使用源代码管理输入框中的提交消息作为 stash 消息。
  • git.followTagsWhenSync - 运行 Git: Sync 时跟随标签。
  • git.checkoutType - 控制运行 Git: Checkout... 命令时显示的引用以及顺序。

Git:暂存前提示保存文件

当您尝试暂存更改时,VS Code 现在会提示您保存未保存的文件。

Git:已删除文件合并冲突的更好差异

已删除文件合并冲突现在具有改进的差异体验,显示与删除相反的分支中文件的实际更改。

Git:添加远程后获取

VS Code 现在会在您添加远程后立即运行 git fetch,从该远程获取所有引用。

Git:分离签出

现在可以从 VS Code 以分离模式签出引用。

Selecting Git: Checkout to (detached)... and then selecting a ref to checkout in detached mode

Git:错误时显示命令输出

当 git 命令抛出错误时,您现在可以使用新的显示命令输出选项查看完整的错误消息。

Show command output option in error message

Git:git.api.getRemoteSources 命令的新选项

git.api.getRemoteSources Git API 命令选项现在支持一个可选的 branch?: boolean 属性,如果远程源提供程序支持,它将使 Git 提示用户从远程源中选择一个分支。

此外,该命令现在支持一个 providerName?: string 选项,允许调用者绕过用户选择远程源并直接使用特定提供程序。

调试

断点视图:异常断点的条件

VS Code 现在支持使用编辑条件上下文菜单操作从“断点”视图编辑“异常”断点的条件。

目前,只有 Mock Debug 扩展具有(模拟)异常断点条件支持,但很快其他调试扩展也会跟进 - 例如 JavaScript 调试器。

Edit Condition menu item

Exception Condition

异常区域可访问性

编辑器中的异常信息区域已变得更易于访问。调试时,一旦遇到异常,VS Code 将自动将焦点移到异常区域,这将使屏幕阅读器报告异常详细信息和堆栈帧。

现在还可以使用 Escape 键或异常区域右上角的 X 按钮关闭异常区域。

UI 改进

概述标尺中显示的调试行

当前调试的行现在显示在编辑器右侧的概述标尺中。对于此装饰,我们使用已存在的 editor.stackFrameHighlightBackground 颜色。除此之外,VS Code 使用 editor.focusedStackFrameHighlightBackground 颜色在概述标尺中显示当前聚焦的调试行(聚焦的调试行是手动在调用堆栈视图中选择的非顶部堆栈帧位置)。

自动调试配置改进

以前,我们引入了一项功能,使调试扩展可以分析当前项目并自动提供调试配置。这些调试配置是动态创建的,因此它们不会显示在 launch.json 配置文件中。在此里程碑中,我们还保留了最近使用的自动调试配置(跨 VS Code 重新启动和重新加载),以使整个体验更顺畅。如果自动调试配置在重新启动后不再有效,VS Code 将在开始调试时要求您从同一提供程序中选择新的自动配置。

调试悬停:底部有帮助文本/提示以切换到正常悬停

调试悬停底部现在有帮助文本,使调试时使用 Alt 切换到编辑器语言悬停更易于发现。提醒一下,当您正在调试时,调试悬停优先于语言悬停,导致无法看到语言悬停。您可以通过按住 Alt 修改键从调试悬停切换回语言悬停。只要按下 Alt,就会显示语言悬停而不是调试悬停。这使得在调试时更容易阅读 Javadoc 描述等悬停。

Debug hover showing the message "Hold Alt key to switch to editor language hover"

调试控制台:折叠相同行

调试控制台现在折叠相同的输出并显示出现次数。此功能使理解重复的程序输出变得更加容易。

Debug Console collapsing identical lines

launch.jsontasks.json 的新变量

引入了以下新变量:

  • ${fileWorkspaceFolder} - 解析为活动 VS Code 编辑器中打开文件的_工作区文件夹路径_。
  • ${fileDirnameBasename} - 解析为活动 VS Code 编辑器中打开文件所在的文件夹名称。
  • ${pathSeparator} - 解析为操作系统用于分隔文件路径组件的字符。

serverReadyAction:按名称启动其他调试配置

serverReadyAction 历史上能够通过匹配 URL 启动浏览器或 Chrome 调试。此版本添加了一个新选项,可以按名称启动另一个任意配置。例如,在您的 launch.json 中,您可以指定:

"serverReadyAction": {
  "action": "startDebugging",
  "pattern": "listening on port ([0-9]+)",
  "name": "Launch Browser"
}

这允许您在标准 Chrome 调试配置中传递其他选项,并使用其他调试器与 serverReadyAction

暂时禁用自动附加

现在可以通过状态栏中的自动附加项或通过调试:切换自动附加命令暂时禁用自动附加。以这种方式禁用自动附加仅适用于当前窗口,并且不需要重新启动终端。可以通过相同方式重新启用它。

Showing the auto attach Quick Pick with an option that reads "Temporarily disable auto attach in this session"

JavaScript 调试器

可以在调试器的 更新日志 中找到完整的更改列表。

断点诊断工具

有一个新工具旨在帮助排查阻止调试或阻止断点绑定的构建或配置问题。要使用它,请在调试会话运行时运行调试:为当前会话创建诊断信息命令。在以后的 VS Code 版本中,当适当的时候,将自动出现此诊断工具的提示。

默认可执行文件位置设置

有一个用户设置 debug.javascript.defaultRuntimeExecutable,允许您指定 Node.js 或 Chrome 二进制文件的默认位置。例如,{ "pwa-chrome": "dev" } 将在您使用 Chrome 类型配置调试时使用 Chrome 的“dev”构建。

请注意,要使用此新选项,您需要确保您的启动配置是 pwa-node 而不是 node,或者是 pwa-chrome 而不是 chrome

任务

npm

内置 npm 扩展的设置 npm.packageManager 有一个新的默认值:autoauto 值将导致包管理器根据 .lock 文件和用于在工作区中安装依赖项的包管理器自动检测。当检测到多个 .lock 文件时,仍将选择一个包管理器,并且会发出警告表示存在冲突。

删除最近任务

任务快速选择始终在顶部有一个最近任务部分。由于这是一个有价值的位置,您现在可以通过右侧的删除最近使用的任务按钮从快速选择中删除它们来更好地管理您的最近任务。

Remove recent task from Quick Pick menu

扩展

在此里程碑中,我们为“扩展”视图和扩展详细信息页面添加了多项改进。

扩展视图现在会自动刷新。例如,安装扩展后,扩展会立即显示在扩展:已安装列表中。您还可以使用标题栏中的刷新按钮手动刷新视图。

Extension view auto refresh

主题:GitHub Light

扩展的详细信息页面现在会显示一个上下文菜单,其中包含扩展的所有操作,就像在“扩展”视图中一样。

ESLint extension details page showing editor actions

主题:GitHub Light

扩展详细信息页面中的功能贡献选项卡现在会显示扩展的 激活事件

Extension Activation Events

主题:GitHub Light

您现在可以一起禁用扩展及其依赖项。当您尝试禁用具有依赖项的扩展时,会出现一个带有全部禁用操作的通知。

Showing option to disable all dependent extensions when disabling an extension

主题:GitHub Light

您可以使用“扩展”视图中扩展上下文菜单中提供的添加到工作区建议从工作区建议中移除操作来将扩展添加到或从工作区建议中移除。

Add to Workspace Recommendations menu item

主题:GitHub Light

当启用设置同步时,扩展建议通知现在会显示安装下拉操作,就像在“扩展”视图中一样。

Extension recommendation notification

我们通过弃用 extensions.showRecommendationsOnlyOnDemand 设置来简化扩展建议配置。您现在可以使用 extensions.ignoreRecommendations 设置来控制扩展建议通知,并使用“扩展”视图的可见性操作默认隐藏建议。

故障排除:扩展二分查找

VS Code 的真正强大之处在于其扩展:主题扩展添加了漂亮的颜色和图标,语言扩展提供了 IntelliSense 和代码导航,调试器扩展使您能够深入研究错误。有时,问题是否由扩展引起以及由哪个扩展引起并不明显。直到今天,您需要禁用所有扩展,然后逐个重新启用扩展以查找有问题的扩展。现在,使用名为扩展二分查找的新功能,此过程变得容易。它使用二分查找算法来快速识别导致问题的扩展。本质上,它会禁用一半的扩展,并要求您检查是否仍然存在您所看到的问题。如果问题消失了,那么有问题的扩展一定在禁用的扩展列表中,而不是在当前启用的扩展列表中。重复此过程,直到只剩下一个扩展。

您可以通过命令面板中的帮助:启动扩展二分查找命令启动扩展二分查找(⇧⌘P (Windows, Linux Ctrl+Shift+P))。然后,它会引导您完成重复禁用和重新启用扩展的过程。每次重新加载后,都会提示您确认问题是否仍然存在。

Start Extension Bisect

Extension Bisect prompting during process

扩展二分查找会反复要求您检查问题是否重现。您随时可以通过停止二分查找中止,如果您关闭二分查找通知,您可以通过帮助:继续扩展二分查找命令继续。

Extension Bisect done

当扩展二分查找过程完成后,系统会要求您针对该扩展提交问题。您也可以从此处保持扩展禁用。

键盘快捷方式编辑器

在此里程碑中,我们为键盘快捷方式编辑器添加了多项改进。

您现在可以通过右侧的配置键绑定齿轮按钮从命令面板配置命令的键绑定。

Configure keybinding for a command from the Command Palette

主题:GitHub Light

您可以从键盘快捷方式编辑器为一个命令添加多个键绑定。

Add multiple keybindings

主题:GitHub Light

您现在还可以从搜索输入中按特定键盘快捷方式编辑器列进行筛选:

  • @command:commandId - 按命令 ID 筛选。例如,@command:workbench.action.showCommands
  • @keybinding:keybinding - 按键绑定筛选。例如,@keybinding:f1
  • @source:user|default|extension - 按来源筛选。

您可以使用 UpDown 箭头在键盘快捷方式编辑器中导航搜索历史记录。

Keyboard Shortcut editor command ID filtering

IntelliSense

来自其他文档的基于词语的建议

VS Code 支持简单的基于词语的建议。当语言服务不可用或语言服务无法计算结果时(例如在注释中键入时),它们非常有用。在此版本中,VS Code 现在可以配置为建议来自其他打开文件的词语。使用 editor.wordBasedSuggestionsMode 设置 allDocuments 以建议来自所有打开文件的词语,使用 matchingDocuments 以建议来自同一语言的打开文件的词语(默认),以及使用 currentDocument 以仅建议来自当前文件的词语。

Word based suggestions

隐藏内联详细信息

VS Code 中的建议具有详细信息,这些详细信息显示在建议旁边的单独浮出控件中。详细信息视图可以关闭,然后详细信息预览将与建议一起以内联方式显示。将详细信息与建议一起以内联方式显示可能会占用太多空间,因此现在可以通过新的布尔设置 editor.suggest.showInlineDetails 禁用此功能。

TypeScript 建议显示路径

TypeScript 可以提供也会添加 import 语句的补全。然而,当有多个同名符号时,很难选择正确的补全。此版本使这更简单,因为自动导入补全的路径会与标签一起显示。

TypeScript show import path

自定义 CodeLens

您现在可以配置 CodeLens 项的字体系列和大小。

Custom CodeLens font

在上面的屏幕截图中,字体和大小是使用以下两个设置自定义的:

"editor.codeLensFontFamily": "Comic Sans MS",
"editor.codeLensFontSize": 12,

编辑器

使用空格缩进时的粘性制表位

如果您更喜欢使用空格缩进代码,则有一个名为 editor.stickyTabStops 的新设置,它使 VS Code 将前导空格中的光标移动视为类似于制表符。

Sticky Tab Stops

删除词语命令

现有的删除词语操作将删除从当前光标位置到词语开头(例如 Windows/Linux 上的 Ctrl+Backspace)或到词语末尾(Windows/Linux 上的 Ctrl+Delete)。现在有一个新命令,它将删除光标下的整个词语,名为删除词语

差异编辑器中的自动换行

差异编辑器的并排视图和内联视图现在都支持自动换行。通常,差异编辑器将尊重与自动换行相关的编辑器设置。对于默认自动换行的 Markdown 文件,差异编辑器也会自动换行它们:

Word wrap in the diff editor

如果您希望差异编辑器从不换行或始终换行,您可以使用新的 diffEditor.wordWrap 设置并将其配置为 "on""off"(默认值为 "inherit",这意味着差异编辑器继承编辑器换行设置)。

代码片段

隐藏扩展代码片段

现在可以从 IntelliSense 中隐藏扩展贡献的代码片段。当您运行插入代码片段时,此功能可从“插入代码片段”选择器中获得。找到要隐藏的扩展代码片段,然后选择右侧的眼睛图标。

Hide Extension Snippet

隐藏的代码片段不会显示在 IntelliSense 中,但仍可通过插入代码片段使用。最后,使用设置同步时,隐藏的代码片段首选项将在您的设备之间同步。

没有前缀的代码片段

在编写代码片段时,您现在可以省略 prefix 属性。没有前缀的代码片段不会显示在 IntelliSense 中,但可以从插入代码片段使用。

集成终端

终端配置支持

您现在可以通过在终端下拉菜单中选择配置终端设置来修改终端设置。

Configure Terminal Settings

键绑定管理

默认情况下,键绑定会分派给工作台而不是终端,如 terminal.integrated.commandsToSkipShell 设置中所指定。当用户输入与这些命令之一对应的键绑定时,会显示一个新通知,并提供配置相关设置的选项。

要将大多数键绑定发送到终端而不是工作台,您可以设置 terminal.integrated.sendKeybindingsToShell

Send Keybindings to Shell

语言

Markdown 内联智能选择

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

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

选择适用于斜体、粗体、内联代码块和链接。

Smart select within a Markdown document expands from the content within an inline Markdown type to include the Markdown symbols.

TypeScript 4.1

此版本的 VS Code 包括 TypeScript 4.1.2。此主要的 TypeScript 更新带来了许多新语言功能的支持——包括 模板文字类型 和对 React 17 的工厂支持——以及改进了 JavaScript 和 TypeScript 的语言工具。一如既往,它还包括许多错误修复。

您可以在 TypeScript 博客 上阅读有关 TypeScript 4.1 的更多信息。

JSDoc @see 标签的初步支持

JSDoc @see 标签允许您在 JSDoc 注释中引用其他函数和类。下面的示例显示了 crash 函数引用来自另一个文件的 WrappedError 类:

// @filename: somewhere.ts
export class WrappedError extends Error { ... }

// @filename: ace.ts
import { WrappedError } from './somewhere'

/**
 * @see {WrappedError}
 */
function crash(kind) {
    throw new WrappedError(kind);
}

VS Code 现在将在执行重命名时包含基本的 @see 引用。您还可以对 @see 标签的内容运行转到定义,并且 @see 标签也将显示在引用列表中。

我们计划在未来的版本中继续改进对 @see 标签的支持。

IntelliSense 行为和类型检查的新设置

有两个新设置控制不在显式 tsconfig 或 jsconfig 项目中的 JavaScript 和 TypeScript 文件中的 IntelliSense 和类型检查行为。

  • js/ts.implicitProjectConfig.strictNullChecks 设置启用 严格空值检查。它默认为 false

    如果您使用 TypeScript,您绝对应该启用严格空值检查,因为它可以捕获许多常见的编程错误。

    严格空值检查在处理 JavaScript 时也很有用。启用严格空值检查后,悬停和 IntelliSense 信息将显示哪些类型可以为 undefinednull。如果您 在 JavaScript 中启用类型检查,VS Code 还可以使用严格空值检查来捕获一些常见的编程错误。

  • js/ts.implicitProjectConfig.strictFunctionTypes 设置启用 严格函数类型。它默认为 true

    严格函数类型更难解释,但通常也会改进 IntelliSense 并可以捕获一些编程错误。

请记住,如果文件是 jsconfig 或 tsconfig 项目的一部分,则这些设置都将被覆盖。

重命名其他隐式 JS/TS 项目设置

其他 JavaScript 和 TypeScript 的隐式项目设置已重命名以使其更准确:

  • javascript.implicitProjectConfig.checkJs -> js/ts.implicitProjectConfig.checkJs
  • javascript.implicitProjectConfig.experimentalDecorators -> js/ts.implicitProjectConfig.experimentalDecorators

这些设置被重命名是因为它们适用于不属于 jsconfig 或 tsconfig 项目的 JavaScript 和 TypeScript 文件。以前的设置名称表明它们只适用于 JavaScript 文件。

HTML

新格式化程序设置

HTML 扩展使用 JSBeautify 作为格式化程序。更新到最新版本的 JSBeautify (1.13) 带来了一些新的格式化程序设置:

  • html.format.wrapAttributesIndentSize:使用 force alignedaligned multiple in html.format.wrapAttributes 时的对齐大小,如果为 null 则使用默认缩进大小。
  • html.format.templating:遵守 django、erb、handlebars 和 php 模板语言标签。
  • html.format.unformattedContentDelimiter:将文本内容保持在一起,分隔符为字符串。

最后一个设置允许您设置一个标签来标记不应格式化的区域:

"html.format.unformattedContentDelimiter": "<!-- DoNotFormat -->"

Unformatted tag example

onTypeRename 的新设置名称

用于编辑标签时修改其匹配的结束标签的输入时重命名功能现在称为链接编辑。启用链接编辑的命令是开始链接编辑 (⇧⌘F2 (Windows, Linux Ctrl+Shift+F2)),Escape 禁用链接编辑模式。

启用它的设置现在是:

"editor.linkedEditing": true

对扩展的贡献

远程开发

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

1.52 中的功能亮点包括:

  • Linux 远程上的自动端口转发。
  • 在本地安装远程扩展的新命令。
  • 您现在可以在容器中打开存储库时选择一个分支。
  • 通过在后台安装扩展来改进服务器启动性能。

您可以在 远程开发版本说明 中了解有关新扩展功能和错误修复的信息。

Notebook

VS Code 团队正在 继续工作 以支持 Notebooks,并改进其用户体验和性能。

改进大型文本输出渲染

如果内容太大,本地 Notebook 编辑器现在将截断输出以确保 UI 始终响应。您仍然可以在文本编辑器中打开输出的完整原始内容。

Large Output Rendering Optimization

扩展创作

文件装饰 API

FileDecorationProvider API 现已定型,可供任何扩展使用。使用此 API,可以将环境信息添加到文件,例如在资源管理器中显示的 SCM 和错误装饰使用此 API。

撤消资源更改

资源管理器操作(如创建文件、重命名文件或删除文件)会引发事件,允许参与,例如 onWillCreateFilesonWillRenameFilesonWillDeleteFiles。此版本添加了对撤消此类资源管理器操作的支持,您应该知道在撤消操作时不会触发上述事件。

新主题颜色

  • statusBarItem.errorBackground:状态栏错误项背景颜色。错误项从其他状态栏条目中脱颖而出,以指示错误情况。
  • statusBarItem.errorForeground:状态栏错误项前景颜色。错误项从其他状态栏条目中脱颖而出,以指示错误情况。

错误背景颜色

主题作者现在可以利用新的主题颜色来处理编辑器中的错误。编辑器错误、警告和信息现在可以通过以下方式设置样式:

  • editorError.background
  • editorWarning.background
  • editorInfo.background

Error background colors

更新的 Codicons

我们已将以下新图标添加到我们的 codicon 库中:

  • check-all
  • circle-large-filled
  • circle-large-outline
  • pass-filled
  • pinned-dirty

Codicons updates

支持视图容器和视图的 Codicons

您现在可以使用 Codicons 作为视图容器和视图的图标。例如:

"views": {
      "explorer": [
        {
          "id": "npm",
          "name": "NPM Scripts",
          "icon": "$(code)",
          "visibility": "hidden"
        }
      ]
  }

有关可用图标列表,请参阅 图标列表

链接编辑范围提供程序

以前称为 OnTypeRenameProvider 的功能现在是公共 API,名为 LinkedEditingRangeProvider

对于文档中的给定位置,LinkedEditingRangeProvider 链接具有相同内容的范围。对其中一个范围的更改可以应用于所有其他范围。

这可以在 HTML 中看到。当编辑开始标签的名称时,结束标签也会自动更新。

FoldingRangeProvider.onDidChangeFoldingRanges

FoldingRangeProvider.onDidChangeFoldingRanges 已成为公共 API。这是一个可选事件,用于指示提供程序中的折叠范围已更改。

使用查询筛选器打开键盘快捷方式编辑器

扩展现在可以使用命令 workbench.action.openGlobalKeybindings 在打开键盘快捷方式编辑器时传递查询文本。

vscode.commands.executeCommand('workbench.action.openGlobalKeybindings', 'query');

fs.isWritableFileSystem

新的 fs.isWritableFileSystem API 允许您检查给定的文件系统是否支持写入。例如,要检查 URL 为 example:/path/to/file 的文档是否在可写文件系统上:

switch (vscode.fs.isWritableFileSystem('example')) {
  case true:
    // The `example` filesystem supports writing.
    // Keep in mind the permissions or other issues may still prevent
    // a file from being written.
    break;

  case false:
    // The `example` filesystem does not support writing (it is readonly).
    break;

  case undefined:
    // VS Code does not know about the `example` filesystem
    break;
}

自定义编辑器 可以使用 fs.isWritableFileSystem 来确定它们是否显示只读 UI。

Markdown 树工具提示 API

用于在 TreeItem 上使用 Markdown 作为 tooltip 的 API 已经定型。您可以在创建 TreeItem 时将 tooltip 设置为 Markdown 字符串,或者,如果您的 Markdown 可能需要额外时间来计算,您可以使用新的 TreeDataProvider.resolveTreeItem 来设置工具提示。

Markdown tree tooltip

TreeItem 突出显示 API

期待已久的 TreeItemLabel API 已经定型。此 API 可用于在 TreeItemlabel 上设置突出显示。您可以在“引用”视图中看到它的实际应用。

Tree item highlights

listDoubleSelection 和 listMultiSelection

现在可以使用上下文值 listDoubleSelectionlistMultiSelection 来启用贡献的树视图中的命令。

视图欢迎内容按钮启用

您现在可以为视图欢迎内容部分设置启用上下文子句。

View welcome content button enablement

建议的扩展 API

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

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

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

状态栏条目背景颜色 API

我们为 StatusBarItem 提出了一个新的属性 backgroundColor,用于设置状态栏条目的背景颜色。目前只支持 statusBarItem.errorBackground,以避免状态栏看起来太花哨。我们可能会在未来扩展此支持以支持更多颜色。

Status bar error in red

此新 API 的用例是使扩展能够在状态栏中指示错误情况。例如,ESLint 扩展可能会决定使用此颜色来提醒用户尚未为工作区启用 ESLint。

更多可主题化的图标

产品图标主题的工作已经恢复。产品图标主题 是一个拟议中的功能,允许您使用一组自定义图标来设置 VS Code 的样式。它适用于内置视图中的所有图标,以及使用 Codicon 库中的图标的所有扩展。产品图标主题将在下一个里程碑中公开发布。

添加了许多图标名称,特别是针对调试、扩展和终端视图,以及设置和笔记本编辑器。

查看更新的 图标列表

移除拟议中的日志记录 API

大约一年前存在的日志记录 API 提案 LogLevelonDidChangeLogLevel 现已移除。扩展可以使用输出通道 API 进行日志记录,或者在使用自定义日志记录器时使用 ExtensionContext#logUri

初步添加拟议中的测试 API

我们正在研究 VS Code 中的测试,并且第一个版本的 API 现在存在于 vscode.proposed.d.ts 中。请阅读链接的问题以获取更多上下文,如果您有意见,请参与。我们预计将比观察者部分更早发布提供程序部分。

新上下文键运算符

<<=>>= 现在可用于上下文键表达式。这是一个贡献命令的示例,该命令仅在打开两个或更多工作区文件夹时出现:

"contributes": {
  "menus": {
    ...
    "when": "workspaceFolderCount >= 2"
    ...
  }
}

语言服务器协议

语言服务器协议 3.16 版本的功能集已定型,可在 LSP 协议网站 上找到。3.16 版本的主要亮点是:

详细的 更改日志 还包含对现有请求的所有次要改进。

调试适配器协议

支持条件异常

在此里程碑中,2020 年 9 月的条件异常 提案 已定型,现在是 调试适配器协议 (DAP) 1.43 版本的一部分。

协议添加扩展了 setExceptionBreakpoints 请求,增加了一个新的可选 filterOptions 属性,用于设置异常筛选器及其条件。调试适配器可以通过 supportsExceptionFilterOptions 功能宣布它支持条件异常功能。

澄清 StackTraceResponse.totalFrames 的语义

调试适配器协议中 supportsDelayedStackTraceLoading 功能的描述似乎表明,为了使延迟堆栈帧加载工作,适配器必须用可用堆栈帧的正确数量填充 StackTraceResponsetotalFrames 字段。然而,对于某些调试器或运行时,此值不容易计算,这使得支持延迟堆栈帧加载变得昂贵。

由于堆栈帧的总数从未在 UI 中显示,我们澄清了 totalFrames 的原始(有些缺乏)语义描述:调试适配器现在可以自由地为 totalFrames 提供一个大(不正确)的值,并且客户端应该准备好接收比请求的帧少,并将其用作已到达堆栈末尾的指示。

澄清 RunInTerminalRequestArguments.cwd 的语义

由于 runInTerminal 请求的 cwd 属性(“当前工作目录”)不是可选的,因此无法省略该属性以表示“不关心”情况。例如,如果调试适配器知道“cwd”已经正确,并且不需要让客户端生成“更改目录”命令,则 DAP 规范没有描述如何实现这一点。

为了解决这个缺点,我们澄清了 DAP 规范,添加了只有当 cwd 属性包含非空路径时,客户端才需要执行更改目录命令。

工程

为问题报告器和进程资源管理器启用沙盒和上下文隔离

为了从启用 Electron 的 沙盒上下文隔离 中获得更多反馈,我们努力为我们的进程资源管理器和问题报告器窗口启用它。此配置最终也将成为主 VS Code 窗口的默认配置:

  • sandbox 已启用
  • contextIsolation 已启用
  • 资源从自定义的 vscode-file 方案(而不是 file)提供

NPM 依赖项的安全供应链

我们通过利用源代码扫描和测试服务改进了 NPM 依赖项供应链,以提高构建管道的安全性和可靠性。

Linux ARM 存储库

用于 ARM 架构(aarch64armhf)的 VS Code 现在发布在以下 Linux 存储库中:

新命令

命令 命令 ID
在差异编辑器中聚焦主侧 workbench.action.compareEditor.focusPrimarySide
在差异编辑器中聚焦次侧 workbench.action.compareEditor.focusSecondarySide
在差异编辑器中聚焦另一侧 workbench.action.compareEditor.focusOtherSide

文档

远程开发

有几种新的方法可以了解 VS Code 远程开发:

Learn module for Docker and VS Code

GitHub 集成

Learn module for GitHub and VS Code

我们如何在开放中制作 VS Code

观看开发人员 Alex Ross 和 Benjamin Pasero 在 GitHub Universe 上的会议录像 我们如何在开放中制作 VS Code,了解我们的团队如何将 VS Code 作为开源构建并在 GitHub 上与社区协作。

Chromebook 上的 VS Code

您知道您可以在 Chromebook 上运行 VS Code 吗?我们认为这对学生和初学程序员来说是一个很好的选择。通过我们的 在 Chromebook 上使用 VS Code 学习 博客文章了解如何在 Chrome OS(通过 Crostini)上设置 VS Code,其中包括有关使用 JavaScript 和 Python 开始编码的说明。

值得注意的修复

  • 39543:在拆分 json 设置编辑器中的概述标尺中突出显示匹配的词语。
  • 67905:同时安装多个扩展 vsix 文件
  • 83187:来自一个配置的环境变量泄漏到另一个配置中。
  • 88703:设置 UI 中未报告具有 URI 格式的字段上的错误
  • 97202:${config} 变量无法在多根工作区启动配置中解析。
  • 98041:Emmet 忽略对“评估数学表达式”的选择
  • 107320:当安装包含 main 的扩展时,不应出现主题选择器。
  • 107461:调试控制台上的历史记录未保留
  • 109111:调试控制台不尊重用户设置。
  • 110077:数据断点未显示在断点视图中。
  • 110426:支持从 stdin 读取的 --diff 参数
  • 110738:允许扩展为自定义文件系统方案设置编辑器标签
  • 110775:Shift 右键单击的“永久删除”选项消失了
  • 110854:支持已打开编辑器中文件系统提供程序的只读更改
  • 110905:CLI:如果扩展已安装,则不要联系 Marketplace,除非强制执行

感谢

最后但同样重要的是,衷心感谢以下本月为 VS Code 做出贡献的人们:

对我们问题跟踪的贡献

vscode 的贡献

language-server-protocol 的贡献

vscode-languageserver-node 的贡献

vscode-eslint 的贡献

vscode-js-debug 的贡献

vscode-html-languageservice 的贡献

node-jsonc-parser 的贡献

vscode-generator-code 的贡献

vscode-vsce 的贡献

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