November 2019 (version 1.41)

更新1.41.1 :此更新解决了这些问题 .

Downloads: Windows: User System | Mac | Linux: snap deb rpm tarball


欢迎使用Visual Studio Code的2019年11月版. 我们希望您喜欢此版本中的许多更新,其中一些重要的重点包括:

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

有问必答:希望尽快看到新功能? 您可以下载每晚的Insiders内部版本,并在可用时立即尝试最新更新. 有关最新的Visual Studio Code新闻,更新和内容,请在Twitter @code上关注我们!

Workbench

Compact folders in Explorer

现在,在文件资源管理器中,我们以紧凑形式呈现单个子文件夹. 以这种形式,单个子文件夹将被压缩在组合的树元素中. 例如,对于Java包结构很有用.

设置explorer.compactFolders控制此行为. 默认情况下,此设置为打开状态.

File Explorer compact folders

Edit left side in diffs

如果您比较两个可编辑的编辑器(例如,通过比较两个文件从文件资源管理器或运行全局"搜索和替换"),则左侧现在也可编辑并可以保存( ⌘S (Windows,Linux Ctrl + S ).

Diff view left hand side edit

注意:如果您厌倦了按⌘S (Windows,Linux Ctrl + S ),可以启用"自动保存"(" 文件" >" 自动保存" .

Save from Peek editors

如果您调出一个Peek视图并键入,则现在可以通过⌘S (Windows,Linux Ctrl + S保存更改, 前提是焦点位于该嵌入式编辑器内部.

Saving in a Peek view

Problems panel

更多过滤器

更多预定义的过滤器已添加到"问题"面板. 现在,您可以按类型(错误,警告和信息)过滤问题,还可以查看问题范围仅限于当前活动文件.

Problems panel filters

主题:GitHub Sharp Dark,字体:FiraCode

在状态栏中显示当前问题

You can now configure VS Code to show the current problem message in the Status bar. This allows you to see the summary of the selected problem in the active file without any additional keyboard or mouse gestures.

注意:启用此功能需要启用设置problems.showCurrentInStatus .

Current problem displayed in the Status bar

主题:GitHub Sharp Dark,字体:FiraCode

灵活的过滤箱布局

现在,"问题"面板中的过滤器框会根据面板的位置和大小来调整其位置.

Problems panel filter box adjustable layout

主题:GitHub Sharp Dark,字体:FiraCode

Improved font rendering (Windows, Linux)

当我们更新到Electron 6的最后一个里程碑时,许多用户报告说字体渲染已退缩. 具体来说,字体的渲染不像以前那样平滑. 我们立即在编辑器中解决了该问题 ,并在1.40恢复版本中提供了此修复程序. 但是,工作台中的其他区域仍遭受不太理想的字体渲染.

在此版本中,我们改进了工作台更多部分的字体渲染(适用于Windows和Linux). 下面的屏幕截图显示了之前和之后的比较(放大以显示差异). 特别是,工作台中的许多树元素和列表元素都是使用灰度抗锯齿渲染的,现在可以使用亚像素抗锯齿渲染.

之前(左)和之后(右):

Improved font rendering before and after

我们计划在工作台的更多部分中改善字体渲染. 您可以查询有关文本渲染问题的查询,以查看进度.

Faster read/write file performance for remote scenarios

现在,对于文件系统位于远程且等待时间较长的情况(例如,在浏览器中使用VS Code且连接速度较慢或连接到远程主机的情况下),从文本编辑器读取和写入文件应该更快.不在同一地区). 我们切换到基于流的读取和写入实现,从而大大减少了通信开销.

Update search results as you type

在全文搜索中,结果现在将随您键入而更新. 这在诸如构造复杂的正则表达式查询之类的场景中特别有用,其中对查询的快速反馈可以帮助您编写RegEx.

在这里,即时反馈有助于构造RegEx查找和替换查询,以采用TypeScript的可选链接语法:

Search result updates on type

主题,漆黑的夜晚,字体Hasklig

注意:可以通过将search.searchOnType设置为false来禁用此功能,并且可以使用search.searchOnTypeDebouncePeriod来调整输入和搜索之间的延迟,默认为300毫秒.

Add cursors to search results

我们添加了一个命令,可将光标添加到文本搜索的所有匹配项中. 通过在"搜索"视图中关注文件的搜索结果,您可以按⇧⌘L (Windows,Linux Ctrl + Shift + L同时编辑该文件中的所有匹配项. 这是使用"查找"小部件在单个编辑器中进行搜索时使用的相同键盘快捷键.

Add cursors to search results

Expand all search results by default

以前,如果全文搜索在一个文件中返回了10个以上的结果,则该结果将在"结果"树中显示为折叠状态. 但是,这有时使查找特定结果变得困难,因此在此版本中,所有结果都将显示为扩展.

您可以将search.collapseResults设置为auto以恢复为旧行为.

Editor

Minimap decorations for errors, warnings, and content changes

Errors and warnings are now highlighted inline in the minimap (code overview). You can change the color of these decorations with the new minimap.errorHighlight and minimap.warningHighlight theme colors.

在下面,您可以看到小地图,其中突出显示了一个细微的缺少逗号拼写错误:

Minimap error and warning decorations

内容更改修饰也显示在小地图的装订线中:

Minimap content change decorations

您可以使用以下命令修改内容更改颜色:

  • minimapGutter.addedBackground
  • minimapGutter.modifiedBackground
  • minimapGutter.deletedBackground

您可以使用scm.diffDecorations设置更改源代码控件装饰的可见性,该设置具有以下值:

  • all -显示所有地点的源控制差速器的装饰品.
  • gutter -仅在左侧编辑器装订线中显示.
  • minimap仅显示在minimap装订线中.
  • overview -仅在概览标尺中显示.
  • none不显示差异装饰.

Code navigation alternate commands

在已经定义的情况下选择" 转到定义"时,VS Code不会执行任何操作. 在此版本中,可以替代执行命令. 例如,可以将" 转到定义"映射为运行" 转到参考" .

这是通过editor.gotoLocation.alternativeDefinitionCommand设置自定义的. 例如,您可以将" 转到定义"的候选项设为"转到声明" ,反之亦然. 如果您喜欢旧的行为,可以将设置保留为空.

Peek, Go to, and Find All commands

现在,每个Peek命令都有一个转到对象. 例如,现在既有Peek实施又有Go to Implementations . Peek视图不会更改当前编辑器,并允许快速就地查看源代码.

以下视频显示了如何使用Peek实现在Peek视图中查看ICommandService接口的所有实现:

Peek Implementations command

主题:GitHub Sharp,字体:FiraCode

相反," 转到实施"用于导航,可让您快速进入实施.

下面的视频(使用"editor.gotoLocation.multipleImplementations": "goto"设置)通过重复按F12导航到ICommandService接口的所有实现:

Go to Implementations command with F12

主题:GitHub Sharp,字体:FiraCode

最后但并非最不重要的一点是,类似于" 查找所有引用"命令,现在有" 查找所有实现" . 它将实现作为稳定列表呈现给编辑器. 例如,在执行影响接口所有实现的重构时,可以将其用作TODO列表.

Find All Implementations in the Side bar

主题:GitHub Sharp,字体:FiraCode

Language-specific filtering for breadcrumbs and Outline view

最后一个里程碑,我们添加了从"大纲"视图和面包屑导航中过滤某些类型(如变量)的功能. 此版本改进了此功能,并允许特定语言的过滤,例如,不显示TypeScript变量,但显示JavaScript变量.

在下面,您可以看到如何在JavaScript文件的"大纲"视图中显示value常量,而不是TypeScript版本.

Language-specific filter for Outline view

主题:GitHub Sharp,字体:Fira Code

IntelliSense keyboard shortcuts on macOS

IntelliSense通常是通过Ctrl + Space触发的. 但是,在macOS上,当配置了多个输入源时,操作系统将使用此键盘快捷键. 这通常会导致混乱,并且用户认为IntelliSense已损坏.

现在有两种方法可以解决此问题:

  • 使用我们为macOS添加的新的Alt + Escape键盘快捷键.
  • 通过偏好设置 > 键盘 > 快捷方式 > 输入源 ,在macOS首选项中通过Ctrl + Space禁用输入源切换.

macOS Keyboard Shortcuts Input Sources option

Screen reader output

新增了一个设置editor.accessibilityPageSize ,它控制编辑器中可以由屏幕阅读器立即读取的行数. 请注意,这对于大于默认值10的数字具有性能影响.

如果您使用屏幕阅读器" 说全部"命令,我们建议将editor.accessibilityPageSize设置为100或1000.下一个里程碑是,我们将研究更改此设置的默认值.

New bracket matching option

现在可以配置"editor.matchBrackets": "near"以仅在光标位于方括号的两侧时才获得突出显示匹配方括号的旧行为. 默认值always ,突出显示包含当前光标位置的匹配括号.

New auto indentation option

设置editor.autoIndent现在可以采用不同的值. 此设置会影响多个功能,例如按Enter ,按Tab或在行缩进和缩进时. 您可以将设置看作是一个越来越"自以为是"的"滑块":

  • "none" :按Enter将插入\n ,仅此而已.
  • "keep" :按Enter键将保留当前行的缩进.
  • "brackets" :以上所有以及围绕特定于语言的括号的特殊逻辑.
  • "advanced" :以上所有标准,并遵循通过onEnterRules定义的特定于语言的规则.
  • "full" (默认):以上所有内容,并遵循通过indentationRules定义的特定于语言的规则.

Code Action menu keyboard shortcuts

现在,"代码操作"和"重构"菜单显示自定义按键绑定 (如果存在).

A keybinding for extract constant

Integrated terminal

Minimum contrast ratio

在终端中使用颜色的应用程序可能会很棘手,并且可以将以下颜色用于文本:

  • 默认前景色
  • 终端主题定义的16种颜色的调色板
  • 一组240种固定颜色
  • 任何RGB颜色(1600万)

问题是应用程序不知道默认的背景色或前景色是什么,以及它是否与应用程序使用的颜色具有良好的对比度. 为了解决此问题,终端现在可以动态更改文本的前景色以符合指定的对比度.

将前景色设置为所需的对比度,范围为1到21:

// 4.5 is recommended for baseline website accessibility
"terminal.integrated.minimumContrastRatio": 4.5

终端颜色将增加或减少亮度,直到满足对比度或前景变为#000000#ffffff为止.

Terminal minimum contrast ratio setting

主题:蓝宝石,字体:哈克

New experimental WebGL renderer

一个新的基于WebGL的渲染器可用于终端,与旧的基于画布的方法相比,它的性能提升高达900%*.

您可以选择使用此设置来使用新的渲染器:

"terminal.integrated.rendererType": "experimentalWebgl"

速度的提高归因于许多因素,但以下是要点:

  • 与通过Web平台的CanvasRenderingContext2D API相比,WebGL允许我们更直接地与GPU CanvasRenderingContext2D .
  • 渲染器几乎专门处理数字和类型化数组,这非常快. 对象和数组的创建也保持最少,以避免不必要的垃圾收集.
  • 现在,所有字符都缓存在纹理图集中,而不仅仅是样式有限的ASCII字符. 这意味着重复绘制相同的字符要快得多.

我们观察到了基于画布渲染器的基于用户硬件/环境的帧渲染差异很大. 每帧通常需要1毫秒到40毫秒的时间,但是在极端情况下(硬件问题是其中一个因素)可能会超过200毫秒. 到目前为止,WebGL似乎更加一致,通常位于0.2毫秒至2毫秒的范围内:

WebGL frames are much faster

可靠性是我们希望在集成后提高的功能之一. 使用canvas渲染器时,如果GPU / canvas出现问题,浏览器将尝试变得更聪明,然后退回到CPU上进行渲染,但是我们从来不希望这种情况发生,因为我们有一个基于DOM的渲染器,这要得多适合于此. 使用WebGL,它应该可以按预期工作或很难失效(无法获取WebGL上下文),在这种情况下,我们可以使用DOM渲染器.

由于渲染花费的时间少得多,因此CPU可以腾出时间专注于解析传入的数据,从而渲染出更多的帧,并且命令运行得更快. 以下性能数据是通过在vscode存储库中运行ls -lR生成的:

Commands run faster on the WebGL renderer

新的渲染器还修复了画布渲染器的一个令人讨厌的错误,即当字符大于单元格大小时,角色的侧面将被剪掉. 在带下划线的Linux上,某些字体最常见此问题.

* 有关基准的更多信息,请访问xtermjs / xterm.js#1790

Source Control

Git: Relative paths in git.ignoredRepositories

git.ignoredRepositories设置现在支持相对路径,当您配置工作区设置并且您想忽略VS Code中的某些存储库时,这些路径非常有用.

Git: Adoption of FileSystemProvider

Git扩展现在使用FileSystemProvider API ,该API除了解决某些编码问题外,还提供了一种更高性能,更可靠的方式,可以从Git存储库中公开文件的旧版本.

Languages

HTML mirror cursor

现在,当您编辑HTML标记时,VS Code会添加一个"镜像光标". 此行为由设置html.mirrorCursorOnMatchingTag控制,默认情况下处于启用状态.

当光标移至HTML标签名称范围时,通过向匹配的标签添加多光标来使用此功能. 就像在多光标模式下一样,您可以使用逐字删除或逐字选择. 当您将光标移到标签名称范围之外时,将删除镜像的光标.

一种特殊情况是在一个的端部进入的空间 ,当光标位于开口标记的末尾,例如div<div | ></div | > . 在这种情况下,VS Code会在结束标记名之后删除插入的空格并退出镜像光标模式,因此您可以继续编辑HTML属性.

HTML mirror cursor

主题: ,字体: 输入单声道

HTML rename tags

现在,您可以使用F2重命名HTML中的开始/结束标记对.

HTML rename tag

Ranking of autocompleted CSS properties

CSS自动完成功能现在按属性的受欢迎程度对其进行排名:

CSS suggestions ranked by popularity

使用情况数据来自ChromeStatus.org .

Sass module support

Sass最近推出了一种新的模块系统 .

我们为SCSS文件中的Sass模块添加了语法突出显示支持以及语言功能支持. 语言功能包括:

  • 自动完成@use@forward .
  • @use@forward路径的路径完成.
  • 自动完成Sass 内置模块,例如sass:mathsass:color .
  • @use@forward导入路径的文档链接.

Sass module support

JSON

为了避免大型JSON文件的性能问题,JSON语言支持现在对其计算的折叠区域和文档符号(对于"大纲"视图和面包屑)的数量设置了上限. 默认情况下,限制为5000个项目,但是您可以使用设置json.maxItemsComputed更改限制.

JSON large file warning

TypeScript 3.7

VS Code现在随TypeScript 3.7.3一起提供. 此重大更新带来了一些TypeScript语言改进-包括可选的链接无效合并断言功能 -以及JavaScript和TypeScript的一些新工具功能. 与往常一样,此版本还包含许多重要的错误修复.

您可以在TS 3.7博客文章中阅读有关TypeScript 3.7功能的更多信息 .

Optional chaining support for JavaScript and TypeScript

由于TypeScript 3.7,VS Code现在支持JavaScript和TypeScript的开箱即用选项链接 . 这包括语法突出显示和IntelliSense:

Optional chaining and nullish coalescing

此外,VS Code可以自动插入?. 当您接受可选属性的完成时:

Selecting a completion on a potentially undefined value automatically inserts an optional chain

Automatic insertion of ?. 自动插入?. depends on strict null checking being enabled. 取决于是否启用了严格的null检查 . Automatic ?. 自动?. insertion can be disabled with the "typescript.suggest.includeAutomaticOptionalChainCompletions" or "javascript.suggest.includeAutomaticOptionalChainCompletions" settings. 可以使用"typescript.suggest.includeAutomaticOptionalChainCompletions""javascript.suggest.includeAutomaticOptionalChainCompletions"设置禁用插入.

Extract interface refactoring for TypeScript

新的" 提取到接口"重构使您可以快速将内联类型提取到接口,以便可以重复使用.

Selecting the new 'extract interface' refactoring

在下面,您可以看到"神经"界面已从"键"中提取出来:

After extracting the 'Neural' interface out of 'keyes'

Semicolon formatter options for JavaScript and TypeScript

通过新的javascript.format.semicolonstypescript.format.semicolons格式设置,您可以控制格式化程序如何处理JavaScript和TypeScript文件中的分号.

有效的分号格式设置值为:

  • ignore -不添加或删除分号(默认).
  • insert-在语句末尾insert分号.
  • remove -删除不必要的分号.

Uncalled function checks

现在,如果您忘记了有条件地调用函数,VS Code将会提醒您.

考虑以下TypeScript代码段:

import * as fs from 'fs';

fs.stat('/path/to/file', function(err, stats) {
  if (stats.isDirectory) {
    handleDirectory(stats);
  }
});

上面的示例使用Node.js fs.stat API来获取有关文件的信息. 但是有一个错误! .isDirectory实际上是一个函数,而不是一个属性! 这意味着将在每个文件上调用handleDirectory ,而不仅仅是按预期的目录,因为isDirectory函数已定义并评估为true .

VS Code can alert when you forget to call a function

请注意,只有启用了严格的空值检查 ,您才会看到此诊断.

Debugging

Debug START view

我们引入了一个新的调试开始视图,以使用户可以更轻松地在新的工作区中启动和配置调试. 根据活动文件,我们将选择适当的调试扩展名,从而可以调试或运行您的应用程序. 对于更详细的调试和运行配置,仍然最好配置一个launch.json文件.

在下面,您可以快速看到开始调试Express JavaScript应用程序,然后如果需要更多控制,则创建launch.json文件.

Debug Start view

Restart frame as an inline action in the CALL STACK view

为了提高" 重新启动框架"操作的可发现性,现在在悬停时可见的"调用堆栈"视图中有一个内联操作. 重新启动帧是在遇到断点后重新运行之前的源代码的便捷方法. 如果调试扩展不支持重新启动框架,则不会显示此操作.

Restart frame button

Debug console shows input and output

为了更好地在Debug控制台中区分输入和输出,我们在左侧添加了input >和output <装饰.

Debug console input and output decorations

Inline breakpoint display

新设置debug.showInlineBreakpointCandidates控制调试时是否在编辑器中显示内联断点候选修饰. 默认情况下,它们是可见的.

Preview features

预览功能尚未发布,但功能足以使用. 我们欢迎您在开发过程中尽早提出反馈.

Search Editor

在这个里程碑中,我们开始着手在专用编辑器中显示搜索结果. 这提供了更多空间来查看搜索结果,并允许您同时维护多个搜索结果集合.

使用此版本,在搜索编辑器中,您可以:

  • 使用" 转到定义"族命令(包括" Peek Definition"和" Open Side to Side")导航到结果.
  • Rerun a search to update the list of results.
  • 查看围绕结果的源代码行.
  • 将结果持久保存到磁盘以供以后引用,甚至在源代码管理中进行跟踪.

在接下来的版本中,我们将继续添加功能并提高可用性.

Search Editor

主题:淡淡的淡紫色,字体:Hasklig

注意:您可以通过将search.enableSearchEditorPreview设置为true来预览此功能.

Call Hierarchy view

稳定中提供了呼叫层次结构API,语言扩展作者正忙于实现它,因此我们添加了呼叫层次结构视图. 这补充了" Peek Call Hierarchy"视图,并与" 查找所有引用"和" 查找所有实现"共享相同的侧栏视图. 语言扩展支持呼叫层次结构API之后,您将能够从上下文菜单或"命令面板"中选择" 显示呼叫层次结构 "以查看视图:

Call Hierarchy view

主题:GitHub Sharp,字体:FiraCode

通过"呼叫层次结构"视图,您可以深入查询符号的呼叫者和呼叫. 它突出显示了活动编辑器中的调用,允许从任何子级中重现视图,并保留以前运行的历史记录.

JavaScript Debugger

我们正在为Node.js和Chrome开发新的调试器. 您可以安装Nightly扩展js-debug-nightly ,并通过更新设置来添加它,以作为嵌入式替代品:

{
  "debug.chrome.useV3": true,
  "debug.node.useV3": true
}

您无需为了使用新的调试器而更改现有的启动配置.

调试器带来了一系列新功能,例如调试和逐步浏览Webworkers的能力:

An animation showing stepping through postMessage calls to and from a webworker

Theme: Earthsong, Font: Fira Code

...调试没有额外配置或标志的npm脚本...

An animation dispatching the "run npm script" command, selecting "npm start", and then hitting a breakpoint in an executed script

...和更多! 如果您遇到问题,请提出问题 .

Contributions to extensions

Remote Development

远程开发扩展继续进行工作,该扩展使您可以将容器,远程计算机或Windows Linux子系统 (WSL)用作功能全面的开发环境.

1.41中的功能重点包括:

  • 远程-容器:更容易尝试容器中的示例存储库(例如vscode-remote-try-python ).
  • Remote - Containers: Improved performance when creating a container and new options for devcontainer.json.
  • 远程-WSL:在基于Windows 10 ARM的PC(例如Surface Pro X)上支持.
  • 现在,Remote Explorer可以将可用视图的作用域限定为特定的远程类型.

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

您还可以阅读有关使用VS Code检查容器的最新博客文章, 并在VS Code教程中尝试更新的使用C ++和WSL .

ESLint

ESLint扩展的改进:

  • 对ESLint 6.x的更好支持-在大多数情况下,使用ESLint 6.x时不需要配置工作目录.
  • 改进的TypeScript检测-一旦在ESLint中正确配置了TypeScript,就不再需要通过VS Code的eslint.validate设置进行其他配置. HTML和Vue.js文件也是如此.
  • Glob工作目录支持-具有复杂文件夹结构且需要通过eslint.workingDirectories自定义工作目录的项目eslint.workingDirectories现在可以使用glob模式而不是列出每个项目文件夹. 例如, code-*将匹配以code-开头的所有项目文件夹. 此外,该扩展名现在默认情况下会更改工作目录. 您可以使用新的!cwd属性禁用此功能.
  • 改进的"保存时自动修复"-"保存时自动修复"现在是VS Code的"保存时代码操作"基础结构的一部分,可在一轮内计算所有可能的修复. 通过editor.codeActionsOnSave设置对其进行了自定义. 该设置支持ESLint特定的属性source.fixAll.eslint . 该扩展还遵循通用属性source.fixAll .

The setting below turns on Auto Fix for all providers including ESLint:

    "editor.codeActionsOnSave": {
        "source.fixAll": true
    }

相反,此配置仅在ESLint上将其打开:

    "editor.codeActionsOnSave": {
        "source.fixAll.eslint": true
    }

您还可以通过以下方式有选择地禁用ESLint:

    "editor.codeActionsOnSave": {
        "source.fixAll": true,
        "source.fixAll.eslint": false
    }

vscode-scss

vscode-scss扩展为SCSS变量,mixin和函数提供了跨文件语言支持. 在这个里程碑中,我们帮助其开发了新版本0.8.0 .

新版本改进了:

  • 更好的导入路径解析
  • 自动完成颜色变量的颜色预览
  • 更好的性能

Extension authoring

Figma design toolkit

我们创建了一个Figma设计工具包,以更好地帮助扩展作者为其扩展设计经验. 在GitHub上查看工具包仓库,其中包含有关如何访问和使用该工具包的说明.

以下是其中包含的某些组件的示例:

Figma design toolkit components

所有组件都应可调整大小和可编辑.

Editing Figma components

如果您遇到任何问题或对某些组件有任何要求,请在工具箱存储库中创建一个问题,以便我们对这些请求进行分类和跟踪.

Debug icon color tokens

我们为"调试"视图添加了一组新的颜色标记.

调试工具栏:

  • debugIcon.startForeground
  • debugIcon.continueForeground
  • debugIcon.disconnectForeground
  • debugIcon.pauseForeground
  • debugIcon.restartForeground
  • debugIcon.stepBackForeground
  • debugIcon.stepIntoForeground
  • debugIcon.stepOutForeground
  • debugIcon.stepOverForeground
  • debugIcon.stopForeground

Debug toolbar colors

主题: Min Dark ,字体: Input Mono

调试断点:

  • debugIcon.breakpointForeground
  • debugIcon.breakpointDisabledForeground
  • debugIcon.breakpointUnverifiedForeground
  • debugIcon.breakpointStackframeForeground
  • debugIcon.breakpointCurrentStackframeForeground

Debug breakpoint colors

主题: Min Dark ,字体: Input Mono

Workspace file events

当文件和文件夹更改时,有一些新事件:

  • vscode.workspace.on[Will|Did]CreateFile
  • vscode.workspace.on[Will|Did]RenameFile
  • vscode.workspace.on[Will|Did]DeleteFile

当通过vscode.workspace.applyEdit(WorkspaceEdit) API从资源管理器或扩展名中创建,重命名或删除文件时,会触发事件,但当磁盘上的文件更改或通过vscode.workspace.fs API修改文件时,则vscode.workspace.fs .

这些事件的可能用例是语言服务器,它可以在重命名文件之前更新文件的内容,或者在删除/创建文件后更新项目文件.

SnippetString

SnippetString类型现在具有用于选择元素的构建器方法.

Strict getWordRangeAtPosition

TextDocument.getWordRangeAtPosition API现在更加严格,它会引发错误,而不是忽略导致空字符串匹配的无效正则表达式.

Deprecated string type for extensionKind

扩展作者可以使用package.jsonextensionKind属性来指示扩展在远程情况下应在何处运行. 在版本(1.40)中,此值可以是字符串或数组. 从此版本开始,此属性仅支持数组值,不建议使用字符串. 有关更多信息,请参见远程开发文档 .

Convert DAP Sources to URIs

当引用可以在编辑器中打开的资源时,VS Code扩展API使用文档URI,而" 调试适配器协议"则基于描述符. 在这个里程碑中,我们添加了一个用于连接两个世界的API. 函数debug.asDebugSourceUri从DAP Source对象创建URI. 这使得在VS Code编辑器中打开DAP源变得简单:

export async function openDAPSource(
  session: vscode.DebugSession,
  source: DebugProtocol.Source
) {
  const uri = vscode.debug.asDebugSourceUri(source, session);
  vscode.window.showTextDocument(vscode.workspace.openTextDocument(uri));
}

Proposed extension APIs

每个里程碑都随附新提出的API,扩展作者可以尝试一下. 一如既往,我们热切希望收到您的反馈. 您必须尝试以下提议的API:

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

请注意,您无法发布使用建议的API的扩展. 在下一个版本中可能会有重大更改,我们永远也不想破坏现有的扩展.

CodeAction.disabled

VS Code鼓励扩展以使用Code Actions实现重构功能. 但是,用户可能很难发现扩展支持哪些重构,并且难以理解为什么给定的重构不适用于特定选择. CodeAction.disabled API提案旨在帮助扩展使其重构更易于发现.

所提出的.disabled物业CodeAction是描述为什么给出的代号行动是不可能的人类可读的字符串. 这是在CodeAction示例扩展中使用.disabled 示例 .

import * as vscode from 'vscode';

export class Emojizer implements vscode.CodeActionProvider {

    public provideCodeActions(document: vscode.TextDocument, range: vscode.Range): vscode.CodeAction[] | undefined {
        const action = new vscode.CodeAction(`Convert to ${emoji}`, vscode.CodeActionKind.Refactor.append('emojize'));

        if (!this.isAtStartOfSmiley(document, range)) {
            // Tell the user why our action is not available
            action.disabled = 'Selection is not currently on a :)';
            return [action];
        }

        action.edit = new vscode.WorkspaceEdit();
        action.edit.replace(document.uri, new vscode.Range(range.start, range.start.translate(0, 2)), '😀');
        return action;
    }

    ...
}

如果用户尝试通过键绑定应用禁用的代码操作,则VS Code将向用户显示.disabled错误消息:

Showing the '.disabled' error in the editor

另外,为了帮助发现,禁用的代码操作在" 重构"和" 源操作"上下文菜单中以淡入淡出的形式显示:

A '.disabled' Code Action in the Refactor menu

请注意,禁用的操作不会显示在顶级灯泡菜单中.

如果您的扩展使用Code Actions,请让我们知道 CodeAction.disabled是否对您有用并能够实现.

Custom Editors editing capabilities

在此迭代中,我们继续研究自定义编辑器建议 . 提醒一下,自定义编辑器是基于Web视图的视图,可以代替特定代码类型的VS Code常规文本编辑器使用. 从VS Code 1.41开始,自定义编辑器现在可以与VS Code的撤消/重做和保存功能集成在一起,这可以实现许多有趣的用例,包括将它们用作可视和所见即所得的编辑器.

您可以在vscode.proposed.d.ts找到当前的API提议,我们还整理了一些非常简单的扩展示例 ,以演示如何使用自定义编辑器来处理文本和二进制文件.

如果您对自定义编辑器感兴趣,请分享您对当前建议的反馈,并让我们知道您是否能够实施.

Semantic tokens provider

我们为语义令牌提供者添加了新的提议API. 新的API允许扩展提供编辑器使用的其他令牌信息,以丰富基于TextMate的语法突出显示.

每个语义标记都使用标记类型和任意数量的标记修饰符注释范围. 例如,类型variable和修饰符membermodification将描述对成员变量的写访问. 然后使用标记类型和修饰符在编辑器中添加样式.

可以在颜色主题和用户设置中配置样式:

    "editor.tokenColorCustomizationsExperimental": {
        "variable.member": {
            "foreground": "#35166d"
        },
        "*.modification": {
            "fontStyle": "underline"
        }
    }

如果您对此功能感兴趣,我们希望获得您对当前提案的反馈,并且我们鼓励您进行实验和一些早期实施.

完整示例可在vscode-extensions-samples repo中获得 .

Language Server Protocol

现在建议通过LSP支持呼叫层次结构视图.

Browser support

Improved support for Firefox and Safari (macOS & iPadOS)

在这个里程碑期间,我们专注于改善使用Firefox或Safari时在浏览器中运行VS Code的体验. 我们修复了许多问题,以支持两种浏览器( FirefoxSafari ). 在Firefox上,由于上​​游阻止程序,我们还没有完整的键盘快捷键支持,您可以在跟踪问题#85252中阅读更多详细信息.

我们还修复了许多问题,以在iPadOS的Safari中启用基本的VS Code功能. 现在,触摸和指针设备可以访问核心UI元素. 但是,仍然存在与预定义的按键绑定( EscapeFunction键),悬停和触摸友好的UI / UX相关的主要阻止程序. 有关更多信息,请参见问题#85254 .

More features available running in a browser

上一个里程碑是,我们引入了对从存储库运行yarn web 支持 ,以设置在浏览器中运行的VS Code. 此设置仍然打算用于在浏览器中测试问题,而不是用于开发.

我们为这个里程碑添加了更多可以测试的功能:

  • Debug
  • Search
  • Tasks
  • Problems

这是一个视频,展示了正在使用的新功能:

VS Code running in a browser

注意:请勿使用此设置进行任何认真的开发. 目的是允许社区将更改贡献回VS Code,以改善浏览器的整体体验.

Engineering

Insiders available in the yum repository

Insiders构建现在在yum存储库中可用,并且像apt存储库一样自动发布. 按照网站上说明设置存储库并使用sudo dnf install code-insiders .

Continuous build for Monaco Editor

在此迭代中,我们为摩纳哥编辑器添加了连续构建和测试管道 . 我们从VS Code资源库master分支构建Monaco Editor核心,并进行完整性测试,以尽早发现潜在的错误或意外的重大更改.

Notable fixes

  • 51039 :在其他选项卡中关闭左侧编辑器时,Diff编辑器关闭
  • 83746 :网站:无法拖放组合和视图(活动栏,面板)
  • 80026 :launch.json中的灰色属性令人困惑,请删除它们
  • 83449 :辅助功能:辅助功能模式下的Ctrl + Right(CursorWordAccessibilityRight)应该跳到下一个单词的开头,而不是结尾
  • 83753 :禁用console.debug.wordWrap会删除换行符和空格
  • 85086 :禁用search.usePCRE2时,全局搜索不支持search.usePCRE2
  • 36219 :Git:"阶段选定范围"命令将编码更改为UTF-8

Thank you

最后但同样重要的是,非常感谢! 致使VS Code变得更好的以下人员:

对我们的问题跟踪的贡献:

vscode贡献:

language-server-protocol贡献:

vscode-css-languageservice贡献:

debug-adapter-protocol贡献:

vscode-chrome-debug-core贡献:

vscode-vsce贡献:

localization贡献:

有超过800个使用Microsoft Localization Community Platform(MLCP)的Cloud + AI Localization社区成员,其中大约100个是Visual Studio Code的活跃参与者. 通过提供新的翻译,对翻译进行投票或建议改进流程,我们对您的贡献表示感谢.

这是贡献者的快照. 有关项目的详细信息(包括贡献者姓名列表),请访问项目站点, 网址https://aka.ms/vscodeloc .

  • 波斯尼亚语(拉丁语,波斯尼亚和黑塞哥维那):西德·穆拉哈萨诺维奇,伊斯玛·巴萨诺维奇,阿德南·里兹万.
  • 丹麦文: Lasse Stilvang.
  • 荷兰语: Lemuel Gomez,Gideon van de Laar.
  • 英语(英国):马丁·利特科特,阿隆索·卡尔德隆,丹尼尔·伊姆斯,卡玛琳·索兰基.
  • 芬兰语: Tuula P.
  • 法语:安托万·格里弗(Antoine Griffard),蒂埃里·德曼(Thierry DEMAN-BARCEL),爱德华·乔尼埃(EdouardChoinière),乔尔·莫尼奥(Joel Monniot),罗多夫·诺尔(Rodolphe NOEL),阿兰·伯芬(Alain BUFERNE),泽维尔·拉法格(Xavier Laffargue),DJ达克塔(DJ Dakta).
  • 德语: Pascal Wiesendanger,Jakob von der Haar,Jan-Nitsche和Michael Richter.
  • 希腊语: Valantis Kamayiannis,ΘοδωρήςΤσιρπάνης.
  • 希伯来语: Ariel Bachar.
  • 印地语: Kiren Paul,Niraj Kumar,Preeti Madhwal,Jaadu Jinn,Mahtab Alam.
  • 匈牙利语:约瑟夫·切尔科(JózsefCserkó),基斯·阿提拉·卡萨(Kiss Attila Csaba),克里斯蒂安·帕普(KrisztiánPapp).
  • Chinese Simplified: Yizhi Gu, Tingting Yi, Justin Liu, Charles Dong, Peng Zeng, Tony Xia, 斌 项, Yixing Zheng, paul cheung, 普鲁文, Sheng Jiang, 钟越, Joel Yang, 一斤瓜子, Zhiqiang Li, Yiting hu, Alexander ZHANG, 张锐, Libing Yang, ZHENGCHENG CHEN, 光宇 朴, 石岩 詹, 舜杰 杨, WJ Wang, Siam Chen.
  • 繁体中文:林小妮,队长,蔡艾伦,苏婷文.
  • 印尼文: Eriawan Kusumawardhono,Arif Fahmi,Laurensius Dede Suhardiman,Christian Elbrianno.
  • 意大利语:亚历山德罗·阿尔皮(Alessandro Alpi),路易吉·布鲁诺(Luigi Bruno).
  • 日语: Fuwa Takayuki,Uchida Takayasu,Uchida Kyohei,Michio Koichi,TENMYO Masakazu,Aya Tokura.
  • Korean: Hongju.
  • 拉脱维亚人:安德里斯·维尔德(Andris Vilde).
  • 挪威语:弗洛德·阿雷布罗特(Frode Aarebrot),安德斯·斯滕萨斯(Anders Stensaas),托马斯·奥格德(ThomasØdegård)和托马斯·伊萨克森(Thomas Isaksen).
  • 波兰语: Makabeus Orban,Wojciech Maj,KacperŁakomski,Oskar Janczak,Szymon Seliga,Mateusz Redynk,Franx Bar.
  • 葡萄牙语(巴西):马塞洛·费尔南德斯,阿尔伯特·塔努尔,亚瑟·利马,内尔西尼奥·桑托斯,普达,马修斯·维蒂·桑托斯,罗德里戈·克里斯皮,罗伯托·丰塞卡,费利佩·纳西门托.
  • 葡萄牙语(葡萄牙):弗朗西斯科·奥索里奥,路易斯·查韦斯,里卡多·索萨·维埃拉,若昂·费尔南德斯.
  • 罗马尼亚语: LaServici,Dan Ichim.
  • 俄语: Vadim Svitkin.
  • 塞尔维亚西里尔文: Dusan Milojkovic.
  • 西班牙语:何塞·玛丽亚·阿吉拉尔,古斯塔沃·加布里埃尔·冈萨雷斯.
  • 泰米尔语: MUTHU VIJAY,Sankar Raj,Kadhireshan S,Pandidurai R,Madhu Chakravarthy,Madhu Maha.
  • 土耳其语: MehmetYönügül,mehmetcanGün,Misir Jafarov,FıratEşki,GökberkNur,Safa Selim.
  • 乌克兰语: Arthur Murauskas,Oleksandr Krasnokutskyi.
  • 越南语: Dat Nguyen,Vuong,Dao Ngo,Van-Tien Hoang,ng-hai.