2022年1月(版本1.64)

更新 1.64.1: 此次更新解决了这些安全问题

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

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


欢迎来到2022年1月发布的Visual Studio Code。此版本中有许多更新,我们希望您会喜欢,一些关键的亮点包括:

如果您想在线阅读这些发布说明,请访问更新code.visualstudio.com上。

观看亮点 在这个版本的VS Code团队发布派对上。你可以在我们的YouTube频道上找到活动的录像

内部人员:想要尽快尝试新功能吗?您可以下载每晚的内部人员版本,并在更新可用时立即尝试最新更新。

工作台

新侧边面板

在这个里程碑中,我们引入了侧边面板,这是工作台中的一个新表面,位于侧边栏的对面,您可以在其中放置来自侧边栏或底部面板的视图。与将底部面板移动到编辑器的左侧或右侧不同,新的侧边面板与底部面板一起工作,因此您可以同时看到更多的视图集。

要使用侧面板,您需要将一些视图移动到其中。根据我们最受欢迎的功能请求之一,您可能希望将大纲视图从侧边栏移动到侧面板。您可以通过将视图拖放到侧面板中来实现这一点。如果侧面板未打开,就像底部面板一样,将视图拖动到编辑器区域的边缘,它将弹出并打开。

在下面的短视频中,大纲视图被拖动到右侧并放置以创建侧面板。然后用户可以在侧边栏中切换视图(这里打开了全局搜索视图),同时保持大纲视图可见。

或者,您可以使用命令面板中的移动视图命令,这将显示可用视图的下拉列表。当您选择一个视图时,您可以通过创建一个新的面板/侧边栏/侧面板条目或将视图放置在现有位置(如资源管理器或源代码控制)来选择位置。

移动视图命令视图位置下拉菜单

视图可以通过拖动视图图标在面板、侧边栏和侧面板之间移动。您可以通过右键单击视图图标并选择重置位置来将视图的位置重置为默认位置。

查看带有重置位置命令的上下文菜单

如果您想将所有视图重置为默认布局,您可以从命令面板运行视图:重置视图位置

更换面板位置

如上所述,新的侧边面板提供了与将面板移动到左侧或右侧类似的功能,但通过不移动原始面板的全部内容来改进这一点。随着面板之间的视图拖放功能,新的侧边面板正在取代移动底部面板的选项。

鉴于此,我们已弃用workbench.panel.defaultLocation设置以及移动面板命令,转而支持类似的命令:

  • 将视图从面板移动到侧面板 (workbench.action.movePanelToSidePanel)
  • 将视图从侧面板移动到面板 (workbench.action.moveSidePanelToPanel)

旧的移动面板命令已被重新映射到提供类似行为的新命令。即使有这种映射,我们建议您将键绑定更新为新命令。

下面,整个底部面板被移动到侧面板,然后返回到原始面板位置。

面板对齐

针对另一个流行的功能请求,我们添加了一个名为面板对齐的新布局选项。此选项允许您配置底部面板在窗口中跨越的距离。有四个选项:

  • 居中 - 这是经典行为。面板仅跨越编辑器区域的宽度。
  • 左侧 - 面板将从窗口的左侧边缘延伸到编辑器区域的右侧边缘。
  • 右侧 - 面板将从窗口的右边缘延伸到编辑器区域的左边缘。
  • Justify - 面板将跨越窗口的整个宽度。

请注意,在所有选项中,活动栏被视为窗口的边缘。

你可以在菜单中的查看 > 外观 > 对齐面板下配置这些选项,或者使用新的设置面板对齐到...命令。

自定义布局控件

随着所有这些新的布局选项的出现,我们一直在探索如何更好地展示布局配置,以便于发现和使用。这就是为什么你可能会在标题栏中注意到一个新的实验性配置布局按钮。这只有在你的window.titleBarStyle设置为custom(在Windows和macOS上默认)并且workbench.experimental.layoutControl.enabled设置为true时才会出现。按钮的可见性由一个实验控制,但如果你想手动启用它,可以通过在设置编辑器(⌘, (Windows, Linux Ctrl+,))中应用这些设置值来实现。

标题栏上的配置布局按钮

菜单的内容仍在完善中,但目前您应该可以看到切换侧边栏、面板和侧面板的功能。此外,您还会看到一个名为自定义布局的新命令条目。这个新命令触发了一个新的交互式快速选择体验,允许您在一个地方控制布局配置的所有方面。

试试看,如果您有任何反馈,请在issue #137633中告诉我们。

设置编辑器

设置编辑器搜索现在在搜索时会在字符串和枚举设置中查找字符串值匹配项。

设置编辑器显示枚举值与查询匹配的结果

新的搜索算法还优先考虑整个单词匹配,这意味着如果同时拥有Java和JavaScript扩展,搜索“java”时,Java设置将首先显示。

设置编辑器搜索显示在搜索"java"时,Java结果在JavaScript结果之前

最后,设置编辑器中的下拉菜单(例如用于files.autoSave)和列表小部件(例如用于files.associations)现在可以在触摸屏设备上使用。

设置同步

设置同步现在支持同步用户任务。

设置同步用户任务

默认的设置同步机器名称现在包括在VS Code for the Web中的浏览器和产品名称。

设置同步默认机器名称,包括浏览器和产品名称

资源管理器:确认并禁用撤销

文件资源管理器长期以来支持撤销堆栈以恢复文件和文件夹的编辑(重命名、剪切/复制/粘贴、移动、导入等)。一些用户发现此功能出乎意料,因此现在有一个设置可以在资源管理器中禁用撤销功能(explorer.enableUndo)。

此外,新增了一个设置(explorer.confirmUndo)用于配置在执行撤销操作时,资源管理器提示确认的频率。默认情况下,资源管理器会比以前更频繁地提示,以确保不会意外发生破坏性的撤销操作,但可以通过将值设置为"light"来恢复到旧的行为,或者设置为"verbose"以在所有撤销操作之前提示。

编辑器

音频提示

音频提示指示当前行是否具有某些标记,例如错误、断点或折叠的文本区域。

当主光标改变其行或首次在当前行添加标记时,它们会被播放。当连接屏幕阅读器时,音频提示会自动启用,但也可以通过将audioCues.enabled设置为on手动开启。

更多的音频提示即将到来,我们将在声音设计上进行迭代。

Unicode 高亮改进

为了改进11月发布中引入的Unicode高亮功能,现在有新的设置可以更好地处理误报。

新设置 editor.unicodeHighlight.allowedLocales 可用于允许在一个或多个配置的区域设置中常见的字符。默认情况下,这包括当前的 VS Code 显示语言和当前的操作系统语言。目前,仅支持在 vscode-loc 语言包中翻译的区域设置。

设置项 editor.unicodeHighlight.includeStrings 控制是否应高亮显示字符串中的字符。默认值为 true,但可以设置为 false 以忽略字符串。

编辑器折叠限制

一个新的设置 editor.foldingMaximumRegions 允许用户更改编辑器中显示的折叠范围的最大数量。默认情况下,限制为5000。请注意,较大的数字可能会导致性能下降。

编辑器适应语言功能时间

扩展功能几乎支持所有语言特性,包括内置功能如折叠区域、CodeLens、嵌入提示和语义标记。这些功能不是由用户手势触发,而是通过输入触发,通常是在超时后。例如,CodeLens会在您输入时更新,语义标记也是如此。之前选择的超时值是固定的,或多或少有些随意。在此版本中,编辑器会根据观察到的计时进行调整,以便较慢的机器或网络连接不会被请求淹没,而较快的机器则能更好地利用。

终端

自动回复

终端现在具有一个可选功能,可以在接收到特定字符序列时自动回复。一个有用的例子是在运行批处理脚本时按下Ctrl+C后出现的Windows批处理脚本消息Terminate batch job (Y/N)?。要让终端在Windows中按下Ctrl+C时自动回复Y并输入(\r),请添加以下设置:

"terminal.integrated.autoReplies": {
  "Terminate batch job (Y/N)?": "Y\r"
}

主题: Sapphire

你可以为其他事情设置自定义回复,但在这样做时要小心,因为你是在自动向进程发送文本。例如,你可以用它来在提示时自动更新Oh My Zsh:

"terminal.integrated.autoReplies": {
  "[Oh My Zsh] Would you like to check for updates? [Y/n]": "Y\r"
}

如果您使用Clink并启用了其类似功能,您可以在Clink或VS Code中通过将回复设置为null来禁用它,以避免这两个功能相互冲突:

"terminal.integrated.autoReplies": {
  "Terminate batch job (Y/N)": null
}

增强的VT支持

增加了对操作系统命令(OSC)4/10/11/12转义序列的支持,使应用程序能够控制终端的主题颜色。

以前,终端中的链接导航需要使用鼠标。现在,可以通过以下命令仅使用键盘打开链接:

  • 终端:打开最后一个网页链接... 例如,https://github.com/microsoft/vscode
  • 终端:打开最后一个文件链接... 例如,/Users/user/repo/file.txt
  • 终端:打开检测到的链接... 查看所有链接(网页、文件、单词)

快速选择显示为类型为网页、文字和文件的链接结果。

源代码控制

更多关于仓库发现的控制

根据社区反馈,新增了两个设置,以更好地控制发现Git仓库的过程,并适应更多样化的文件夹结构。

  • git.repositoryScanMaxDepth - 控制扫描时使用的深度。
  • git.repositoryScanIgnoredFolders - 控制扫描期间应忽略的文件夹列表。

更改列表排序改进

一个新的设置(scm.defaultViewSortKey)控制用于源代码控制视图中更改列表的默认排序键。每个文件夹/工作区的排序键选择也会被记住。

选项有:

  • name - 按文件名排序更改。
  • path - 按文件路径排序更改(默认)。
  • status - 按源代码控制状态排序更改。

您需要重新加载VS Code窗口以应用设置更改。

新的 Git stash 命令

一个新的命令,Git: Drop All Stashes...,被添加到命令面板中,允许用户清除所有的存储条目。与任何具有永久性后果的Git操作一样,请谨慎使用此命令。

Git 输出 - git 命令执行时间和持续时间

为了帮助追踪性能问题,Git 输出通道现在显示 git 命令执行的时间以及命令的持续时间,不包括生成子进程所需的时间。

笔记本

在渲染的Markdown和代码单元格输出中查找文本

VS Code 现在支持在 Markdown 单元格的渲染视图和代码单元格的输出中查找文本。该功能默认是禁用的,因为它需要渲染所有 Markdown 单元格和输出,这在打开笔记本时可能会很耗费资源。你可以通过在查找控制输入框的过滤器下拉菜单中选择选项(Markdown 预览代码单元格输出)来启用此功能。

目前,在搜索输出中的文本时存在一些限制。例如,您无法搜索由VS Code本身呈现的流式/文本输出。我们计划在下一个迭代中改进这一点。

单元格折叠界面

Notebook 单元格的左侧有一个蓝色条,表示它们被聚焦。这个条现在是交互式的 - 你可以点击顶部部分来折叠单元格的输入,点击底部部分来折叠输出。

Markdown 单元格折叠提示

当Markdown单元格的一个区域被折叠时,将出现一条消息,显示折叠的单元格数量,以便更明显地表明某些单元格被隐藏。

折叠的Markdown单元格提示

单元格执行提示

我们做了一些更改,使单元格执行时更加明显,以及哪个单元格正在执行。

首先,当一个单元格正在执行但未滚动到视图中时,编辑器窗格的顶部将显示一个进度条。

其次,当单元格正在执行时,笔记本工具栏上会添加一个新按钮,转到正在运行的单元格

第三,如果代码单元通过notebook.outline.showCodeCellsnotebook.breadcrumbs.showCodeCells设置在大纲或面包屑中可见,它们将在执行时显示一个动画运行图标。

调试

查看和编辑二进制数据

VS Code 的通用调试器现在支持查看和编辑二进制数据(也称为“内存”)。在变量视图中,可以查看和编辑内存的变量会显示一个内联的二进制图标,选择它会打开Hex Editor

调试会话期间显示的变量二进制数据

主题: Codesong

内存查看和编辑依赖于调试适配器协议的内存相关功能,调试扩展必须实现这些功能才能在VS Code中启用相应的用户界面。详情请参阅下面的调试器扩展编写部分。在此版本中,只有内置的JavaScript调试器支持查看和编辑二进制数据,但我们预计其他调试扩展很快也会跟进。

JavaScript 调试

排除调用者在断点处暂停

有时您可能会设置断点或添加调试器语句,但只想在从某个代码路径调用时暂停。像mousemove这样的DOM事件处理程序就是一个很好的例子。在此版本中,JavaScript调试器增加了“排除调用者”的功能,使其在断点或调试器语句处暂停。

当在某个位置暂停时,您可以右键点击CALL STACK视图中的一个帧,并选择Exclude Caller命令。一个新的EXCLUDED CALLERS视图将会显示,允许您查看和管理被排除的调用者,之后如果被排除的调用者出现在调用堆栈中的任何位置,您的程序将不会在断点位置暂停。

Linux上的Edge支持

Microsoft Edge 调试现在在 Linux 上可用,通过 edge 调试类型。

语言

Markdown路径智能感知

内置的Markdown扩展现在包括链接和图像的路径智能感知。

Markdown链接中的路径建议

路径建议的工作方式与CSS和HTML文件中的路径IntelliSense类似。以/开头的路径相对于当前工作区解析,而以./开头或没有任何前缀的路径则相对于当前文件解析。当您输入/时,路径建议会自动显示,或者可以通过使用⌃Space (Windows, Linux Ctrl+Space)手动调用。

Path IntelliSense 还可以帮助您链接到当前文件或另一个 Markdown 文件中的标题。以 # 开始路径,以查看文件中所有标题的补全(根据您的设置,您可能需要使用 ⌃Space (Windows, Linux Ctrl+Space) 来查看这些内容):

Markdown链接中的标题部分建议

你可以通过设置 "markdown.suggest.paths.enabled": false 来禁用路径智能感知。

Markdown 删除线支持

VS Code 现在支持在 Markdown 编辑器和内置的 Markdown 预览中渲染 ~~删除线~~ 文本:

Markdown编辑器和预览中的删除线渲染

删除线是通过将文本包裹在两个波浪号字符中来书写的。

虽然VS Code的所有内置主题都支持删除线,但来自市场的一些主题可能需要更新才能在编辑器中正确渲染删除线文本。

TS 4.5.5

VS Code 现在捆绑了 TypeScript 4.5.5。

此次小更新修复了一些重要的崩溃和工具错误

使用JS/TS代码片段环绕

许多JavaScript和TypeScript代码片段已更新,以支持环绕选定的文本。

要使用环绕功能,首先选择一些文本,然后运行插入代码片段。与替换所选文本不同,诸如ifforof之类的代码片段现在将使用所选文本作为新语句的主体。

HTML 自动在等号后插入引号

在HTML中属性后输入=时,语言服务现在会自动插入引号并将光标放置在引号之间。设置html.completion.attributeDefaultValue允许您指定使用哪种类型的引号(单引号或双引号),默认情况下使用双引号。

可以通过设置"html.autoCreateQuotes": false来禁用该功能。

JSON 清除模式缓存命令

一个新命令清除模式缓存清除之前下载的模式的缓存。

LaTeX 支持

已添加LaTeX基本语言支持。这包括语法高亮和自动闭合对。

LaTeX片段

网页版VS Code

远程仓库

GitHub 仓库

在VS Code for the Web中创建的提交现在会在GitHub UI中被签名并标记为已验证。此外,维护者现在可以在使用VS Code for the Web时提交从分叉提交的拉取请求。这要归功于新的GitHub GraphQL createCommitOnBranch API。

此外,源代码管理视图现在支持多选

主题: One Monokai

以前,只有在将您的GitHub仓库克隆到本地或远程机器后,才能创建空提交。现在,您也可以在VS Code for the Web中使用GitHub Repositories: Commit Empty命令创建空提交。

还添加了一个新的配置,以启用自动下载给定大小以下的存储库的完整内容,从而启用诸如全存储库文本搜索和转到引用等高级功能。设置remoteHub.experimental.fs.maxAutoDownloadSize控制在尝试下载完整内容之前显示的存储库大小限制。默认情况下,maxAutoDownloadSize未设置,以便在没有提示的情况下从不下载。

Azure 仓库

Azure Repos 支持已从 GitHub Repositories 扩展中移出,现在有了自己专用的 扩展,该扩展也可以在桌面上安装。

采用的预发布扩展

VS Code for the Web 现在捆绑了 GitHub Pull Request and IssuesGitHub Repositories 扩展的预发布版本。

PWA 和离线支持

VS Code for the Web 已经采用了 PWA 模型,现在可以作为一个 PWA 安装在主机操作系统上。由于采用了这一模型,现在还可以启用一些离线功能。一旦访问过 vscode.devinsiders.vscode.dev,用户现在可以在离线时使用它来编辑本地文件。

安装VS Code PWA提示

对扩展的贡献

Python

改进的解释器快速选择

为了更容易选择所需的解释器,Python 扩展现在在选择解释器快速选择中按类型分组解释器。

解释器分组在解释器选择器中

我们还在尝试将状态栏中的活动/选定的解释器向右移动,可能放在语言状态内部,所以如果看不到,请检查右侧的Python状态。

添加对'conda run'的支持

为了提高我们对Anaconda用户的支持,我们已经实现了对conda run的支持,使用--no-capture-output参数,该参数不会捕获过去导致错误的输出。此功能用于执行linter、测试和格式化功能。

有一个已知的bug issue #10972,在Windows上运行带有特殊字符参数的linting和测试时会导致错误。这是由于conda run读取带有特殊字符的参数的方式,因此它可能会影响你在settings.json中指定的任何命令行参数。

Anaconda团队正在处理这个问题,并希望很快能发布修复程序。一旦新版本发布,您可以在Conda网站上更新您的Anaconda版本。

智能选择和更好的折叠支持

通过Pylance语言服务器,Python代码选择和折叠功能也得到了改进。

使用键盘选择Python代码需要更少的按键,因为在定义选择范围时会考虑代码的语义信息:

主题: Horizon Extended

至于折叠,以前区域仅通过缩进来定义,这对于某些情况(如多行字符串)并不理想。现在折叠区域适当地考虑了语义信息,并且还支持#region注释:

Jupyter

远程 Jupyter 服务器

Jupyter 扩展现在不再需要你在切换本地和远程 Jupyter 服务器时重新加载 VS Code。此外,该扩展现在在内核选择器中同时显示本地和远程内核。

十六进制编辑器

Hex Editor 已经进行了一些重要的架构重构。值得注意的是,在大多数情况下,它现在能够打开任何大小的文件而不会出现性能问题。此外,它的布局宽度现在可以配置,并且它有一个更强大的查找/替换实现。在未来的迭代中将继续进行改进。

远程开发

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

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

GitHub 拉取请求和问题

继续在GitHub Pull Requests and Issues扩展上进行工作,该扩展允许您处理、创建和管理拉取请求和问题。查看0.36.0版本的更新日志以了解亮点。

预览功能

终端 shell 集成

终端现在具有实验性的 shell 集成功能,这使得 VS Code 能够了解终端内部发生的情况,这在以前是未知的。当使用设置 "terminal.integrated.enableShellIntegration": true 启用时,如果可能的话,运行 shell 集成脚本的参数将被注入到您的终端配置文件中。该脚本本身主要将不可见的序列注入到您的提示符中,为 VS Code 提供诸如提示符位置、命令和命令输出的位置、每个命令的当前工作目录 (cwd) 以及每个命令的退出代码等信息。

利用这些信息,我们可以通过多种方式增强现有功能:

  • 快速检测当前工作目录(cwd) - 以前这仅在macOS和Linux上可能,并且需要启动进程或查询文件系统以获取该信息。现在这在Windows上也适用。cwd用于诸如链接检测和在拆分终端标签时继承cwd等功能。
  • 改进命令跟踪功能 - 此功能之前已存在,但仅在macOS上有默认的键绑定(Cmd+Up/Down),并使用了一种简单的方法来猜测按下Enter时的行位置。

Shell 集成启用了以下新功能:

  • 运行最近的命令 - 由于我们知道运行了哪些命令,我们可以提供一个命令,允许您在快速选择中查看并再次运行它们。 最近的命令显示在快速选择中,包括当前工作目录的信息以及它们运行的时间
  • 转到最近的目录 - 类似于上面的功能,我们也允许导航到过去的目录。 最近的目录显示在快速选择中,按频率排序(降序)
  • 链接支持相对于当前工作目录(cwd) - 我们现在知道终端缓冲区中每一行的cwd,因此我们可以支持在终端中打开相对于激活位置的cwd的链接。以前,当点击链接时,会打开一个快速选择器,显示包含匹配名称的任何文件夹的结果。现在,将打开确切的文件匹配。在cwd为vscode的终端中,package.json被回显。点击文件名将打开vscode/package.json。目录更改为template-string-converter,然后package.json被回显。点击文件名将打开template-string-converter/package.json。

目标是在功能的可靠性足够好时默认开启shell集成。我们在参数注入方面采取的方法是尽可能不侵入。例如,我们不会像某些终端那样自动修改您的shell初始化脚本,而是拦截进程的创建,检查参数,并在我们确信终端可以运行这些参数时注入shell集成参数。希望能够在不需要用户进行任何配置的情况下使其良好运行,并且不干扰您现有的shell设置。

当前支持的shell包括Windows的pwsh,以及Linux和macOS的pwsh、bash和zsh。

如前所述,这是一个实验性功能,尚有一些粗糙之处,并且存在一些已知问题:

  • $PS2 目前不支持行延续。然而,pwsh 中的行延续确实有效。
  • 目前还不支持正确的提示。
  • 已知zsh脚本有时不会激活
  • 远程 VS Code 窗口支持有限。

资源管理器文件嵌套

资源管理器现在实验性地支持以逻辑嵌套布局显示同一目录中的文件。这有助于将相关文件在视觉上分组,并将文件折叠到一个“根”文件中以减少混乱。添加了几个新设置来控制此行为:

  • explorer.experimental.fileNesting.enabled: 控制是否启用文件嵌套。
  • explorer.experimental.fileNesting.expand: 控制文件嵌套是否默认显示为展开状态。
  • explorer.experimental.fileNesting.patterns: 控制文件如何嵌套。

例如,在许多仓库中,.ts 文件与其生成的 .js.d.ts 和/或 .js.map 文件相邻。虽然长期以来可以通过 files.exclude 完全隐藏生成的文件,但有一种快速访问生成文件的方式会很好,现在通过嵌套可以实现这一点:

下面,Explorer 正在使用默认的 explorer.experimental.fileNesting.patterns 配置来嵌套 .js.js.map 文件,这些文件在相应的 .ts 文件展开时显示。

资源管理器显示了一些折叠和展开的嵌套

主题: GitHub Light

扩展开发

语言默认图标

语言贡献者可以为语言定义一个图标。

{
  "contributes": {
    "languages": [
      {
        "id": "latex",
        // ...
        "icon": {
          "light": "./icons/latex-light.png",
          "dark": "./icons/latex-dark.png"
        }
      }
  ]

如果当前文件图标主题只有该语言的通用文件图标,则会显示该图标。

同样,像MinimalNone这样不显示文件图标的文件图标主题,也不会使用语言图标。如果文件图标主题有扩展名或文件名的图标,这些图标将被优先使用。

文件图标主题可以通过在主题文件中定义 showLanguageModeIcons: true|false 来自定义新行为。

  • showLanguageModeIcons: true 即使主题没有指定文件图标,也会显示默认的语言图标。
  • showLanguageModeIcons: false 防止使用默认的语言图标。

QuickPickItem 分隔符

扩展作者现在有能力在快速选择中添加分隔符。这对于分组项目或在项目之间添加一些空间非常有用:

快速选择分隔符

要在现有的快速选择中添加分隔符,请向现有的项目列表中添加一个新的QuickPickItem,但在QuickPickItem上指定kind属性,并将其设置为QuickPickItemKind.Separator

在上面的例子中,您将向您的项目列表中添加以下对象:

{
    label: 'APIs',
    kind: QuickPickItemKind.Separator
}

如果您没有指定kind属性,或者将其设置为QuickPickItemKind.Default,该项目将被视为普通的QuickPickItem

vscode.workspace.createFileSystemWatcher 现在支持任何路径

现有的 vscode.workspace.createFileSystemWatcher API 已改进,允许您传递任何文件或文件夹路径以进行文件监视,即使它位于工作区之外。以前,文件监视器仅限于工作区中打开的文件夹。

根据你传递给方法的glob模式,监视器可能是递归的(例如,**/*.js)或非递归的(*.js)。递归监视器需要更多资源,因此我们建议尽可能使用简单的glob模式。

示例:

// Watch a folder non-recursively
vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(vscode.Uri.file(<path to folder outside workspace>), '*.js'));

// Watch the active text editor file
vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(vscode.window.activeTextEditor.document.uri, '*'));

注意: 作为此更改的一部分,我们对现有的文件监视器进行了行为更改。仅使用通配符模式(例如,vscode.workspace.createFileSystemWatcher('**'))指示的文件监视器将不再接收工作区外部文件更改的事件。它只会接收来自工作区内部路径的文件事件。如果用户没有打开的工作区,则不再通过此方法传递任何事件。这样做是为了确保扩展程序不会从工作区外部接收到意外事件。

vscode.TerminalLocation

您可以使用新的TerminalLocation API指定扩展终端将在何处创建。

这允许通过提供一个parentTerminal,在编辑器区域和面板之间进行选择,以及更多操作来创建分割终端。

用于onWill事件的取消令牌

VS Code API 提供了参与文件操作的事件,例如 onWillRenameFiles。这种参与可能是长时间运行的,因此用户可以取消它。通过此版本,扩展程序可以通过相应事件上的取消令牌来观察用户端的取消操作,例如 FileWillRenameEvent#token。这使得扩展程序也可以取消昂贵的下游操作。

Git 扩展 API

  • 新增了一个Repository.add方法,以启用暂存文件的功能。
  • 添加了Repository.tagRepository.deleteTag方法,以实现创建和删除标签的功能。

onTaskType 激活事件

提供任务的扩展可以通过使用新的onTaskType:foo激活事件来限制其不必要的激活。这是对在onCommand:workbench.action.tasks.runTask上激活的改进,因为workbench.action.tasks.runTask对于提供任务的扩展来说通常过于急切。

调试器扩展编写

VS Code 现在实现了调试适配器协议的内存相关功能

在此版本中,VS Code 开始支持查看和编辑二进制数据,通过支持 Debug Adapter Protocol 的以下内存相关功能:

  • VS Code 尊重 DAP 变量上的 memoryReference 属性,并通过将客户端能力 supportsMemoryReferences 传递给调试适配器来宣布这一点。
  • 如果 VS Code 从调试适配器接收到 supportsReadMemoryRequest 能力,它将启用查看二进制数据的用户界面,并发出 readMemory 请求以检索数据。
  • 如果 VS Code 从调试适配器接收到 supportsWriteMemoryRequest 能力,它将启用用于编辑二进制数据的用户界面,并发出 writeMemory 请求以存储数据。
  • VS Code 处理 memory 事件,并通过将客户端能力 supportsMemoryEvent 传递给调试适配器来宣布这一点。

语言服务器协议

新版本的语言服务器协议以及相应的npm模块已经发布。该版本包含了对笔记本文档的提议实现。规范部分可以在这里阅读。

提议的扩展API

每个里程碑都伴随着新的提议API,扩展作者可以尝试它们。一如既往,我们希望得到您的反馈。以下是尝试提议API的步骤:

  1. 找到一个你想尝试的提案并将其名称添加到package.json#enabledApiProposals中。
  2. 使用最新的vscode-dts并运行vscode-dts dev。它会将相应的d.ts文件下载到您的工作区中。
  3. 您现在可以针对提案进行编程。

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

禁用终端持久性

在创建终端时,您可以通过在TerminalOptionsExtensionTerminalOptions中设置disablePersistence来选择在重启和重新加载时禁用终端持久性。

export interface TerminalOptions {
  disablePersistence?: boolean;
}

内嵌提示 API

这是对所有对inlay hints API感兴趣的人的一个提醒。它即将完成,并增加了对交互式标签部分的支持。这些允许你将源代码位置绑定到提示上,从而启用代码导航等功能。此外,现在也支持命令。该提案的最新状态和开发情况在这里:vscode.proposed.inlayHints.d.ts

语言状态 API

语言状态项API计划最终确定。请尝试并提供反馈给vscode.proposed.languageStatus.d.ts

测试提案

我们正在提出一种官方的方法来实现测试的“刷新”处理程序,请查看vscode.proposed.testRefresh.d.ts。这将允许扩展在VS Code中统一使用标准的“刷新”按钮,并避免实现自己的按钮。

此外,我们建议TestItemvscode.proposed.testSortText.d.ts中具有一个sortText属性。

内联补全:自动括号补全

当扩展提供内联完成项时,它可以将其属性completeBracketPairs设置为true。如果设置,VS Code 会在向用户显示内联完成之前,尝试通过关闭或删除完成文本中的无效括号来修复它们。

树形拖放提案支持拖入编辑器

树形拖放提案几乎已经准备好最终确定,现在支持当TreeDragAndDropController支持"resourceurls" mime类型时,从树形视图拖放到编辑器中。详细信息可在issue #141418中找到。尝试一下并为vscode.proposed.treeViewDragAndDrop.d.ts提供反馈。

评论时间戳

评论API在Comment上新增了一个timestamp属性。同时,API还新增了一个设置项来控制评论时间戳的显示方式:comments.useRelativeTime。请尝试使用并提供反馈给vscode.proposed.commentTimestamp.d.ts

工程

vscode-bisect 工具

一个新的工具可用于二分法查找已发布的VS Code Insiders版本(网页版和桌面版),以帮助诊断问题:

npx vscode-bisect

类似于git bisectvscode-bisect将启动一系列过去发布的Insiders构建,询问该构建是否重现了问题。最终结果是引入问题的一系列提交。该实例将使用一个专用的新文件夹来存储用户数据,以免影响您的主要开发环境。

从源代码运行代码Web和服务器

用于从源代码运行 VS Code for the Web 和 VS Code Server 的脚本已移至 scripts 文件夹:

  • ./scripts/code-web.sh|bat 从源代码启动 Web 代码(也称为“无服务器”),并在其上打开浏览器。使用 --help 获取更多选项。
  • ./scripts/code-server.sh|bat 从源代码启动 VS Code 服务器。添加 --launch 以在浏览器中额外打开网页界面。使用 --help 获取更多选项。
  • ./scripts/test-web-integration.sh|bat 用于远程网页测试。
  • ./scripts/test-remote-integration.sh|bat 用于远程测试。

扩展

在这个里程碑中,我们通过减少VS Code向服务发出的查询次数来改进Marketplace的交互。

显著的修复

  • 91286 在客户端上限制设置同步活动
  • 117648 当使用sass扩展时,使用emmet展开"gtc"的结果很奇怪。
  • 134466 不存在的调试器配置
  • 135677 悬停在设置UI链接上时,开头显示#
  • 138072 将最近打开的工作区存储在全局存储中
  • 138805 打开大型二进制文件时读取全部内容
  • 138850 磁盘上的文件更改后,打开的编辑器可能会变为空
  • 139880 调试:在按下F5时被要求保存文件
  • 140003 任务无法从位于不同工作区文件夹的启动配置中引用
  • 140129 每次双击settings.json文件都会导致新标签页的打开
  • 140560 VS Code 停止调试 API 的问题
  • 140967 Comment.body 即使对于纯字符串也以 Markdown 格式渲染

感谢您

最后但同样重要的是,向VS Code的贡献者们表示衷心的感谢

Web扩展

扩展作者为启用作为web extensions运行代码的扩展(以下列表在2021年12月7日至2022年1月31日之间):

问题跟踪

对我们问题跟踪的贡献:

拉取请求

vscode 的贡献:

vscode-css-languageservice 的贡献:

vscode-eslint 的贡献:

vscode-extension-samples的贡献:

vscode-html-languageservice的贡献:

vscode-js-debug 的贡献:

  • @zkx5xkt: 修复: DebugSessionTunnels. 远程/本地端口使用错误 PR #1163

vscode-pull-request-github 的贡献:

vscode-textmate的贡献:

vscode-vsce 的贡献:

debug-adapter-protocol的贡献:

monaco-editor的贡献:

node-jsonc-parser的贡献: