2019年2月(版本1.32)

更新: 每个版本中解决的问题 - 1.32.3 - 1.32.2 - 1.32.1

下载:Windows:x64 | Mac:Intel | Linux 64位:deb rpm tarball | 32位:deb rpm tarball


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

如果您想在线阅读这些发布说明,请访问更新code.visualstudio.com上。
您还可以查看这个1.32版本的亮点视频,由云开发者倡导者Brian Clark提供。

发布说明按与VS Code重点领域相关的以下部分排列。以下是一些进一步的更新:

  • Workbench - 键盘导航控制、大纲视图和面包屑使用树形小部件。
  • Editor - 修复所有源代码操作允许您在保存时修复,改进了列选择。
  • Languages - 安装TypeScript和Markdown扩展时无需重新加载。
  • 扩展开发 - 向调试工具栏添加命令,跟踪上次方法签名的选择。

内部人员:想要尽快看到新功能吗?您可以下载每晚的内部人员版本,并在更新可用时立即尝试最新更新。要获取最新的Visual Studio Code新闻、更新和内容,请在Twitter上关注我们@code

工作台

预览并应用新主题

您现在可以在安装提供颜色和文件图标主题的扩展后立即预览和应用它们。

应用主题

键盘快捷键编辑器

您现在可以在键盘快捷键编辑器中编辑键绑定的when子句。

更改When表达式

我们从键盘快捷键编辑器中移除了打开keybindings.json文件的链接,转而使用编辑器标题栏右侧的{}按钮。

当直接编辑您的keybindings.json文件时,默认的键绑定不再显示在左侧。如果您希望查看默认键绑定,您可以勾选工作台 > 设置:打开默认键绑定设置(将workbench.settings.openDefaultKeybindings设置为true)。

自动键盘导航设置

一个新的设置列表:自动键盘导航控制列表和树是否捕获按字典顺序的按键以导航和过滤元素。如果禁用,键盘导航将变为模态,list.toggleKeyboardNavigation命令将切换其状态。您可以为该命令分配特定的键盘快捷键。例如,您可以将其设置为/,只有在按下/后,后续的按键才会过滤列表/树中的项目。此设置默认启用。

以下是使用 / 切换文件资源管理器的键盘导航的快捷键:

{
  "key": "/",
  "command": "list.toggleKeyboardNavigation",
  "when": "filesExplorerFocus"
}

Linux上的默认标题栏样式

在听取了用户反馈后,我们决定将Linux上的默认设置window.titleBarStylecustom恢复为native。我们仍然推荐需要更好无障碍支持的用户使用自定义标题栏。有关此更改的更多信息已记录在我们的Linux设置页面中。

新的大纲和面包屑树形小部件

大纲文档符号视图和面包屑选择器已采用新的树部件。新的实现使它们更快,并提供了更好的过滤支持,以及其他新的树部件增强功能。

编辑器

悬停和问题查看改进

在此版本中,问题悬停中添加了一个带有快速修复查看问题操作的命令栏。快速修复操作从悬停中应用快速修复,而查看问题操作将在编辑器中打开查看视图。

问题悬停

从问题预览视图中,您现在可以导航到上一个和下一个错误/警告。

问题预览

我们还改进了悬停和问题预览视图的外观。带有问题和代码块的悬停被赋予了足够的空间来显示其内容:

悬停

自动修复和首选代码操作

代码操作API为VS Code的快速修复功能(你在编辑器中看到的灯泡图标)提供支持。尽管对于给定的错误可能有许多快速修复选项,但通常有一个是最合理的解决方案。例如,修复拼写错误通常比生成新字段更可能是正确的修复方式。

扩展现在可以将代码操作标记为“首选”,以表明它是解决潜在问题的最合理方法。当有首选修复可用时,灯泡图标会添加一个蓝色徽章。首选修复可以使用自动修复命令(⌥⌘. (Windows, Linux Shift+Alt+.))自动应用。

首选修复方案在灯泡上标有蓝色徽章

首选快速修复通常应:

  • 正确修复根本错误(而不是抑制它)。
  • 成为错误的合理修复。
  • 不要意外执行大量操作。

重构代码操作也可以标记为首选,以表明它们是最合理的重构。例如,虽然可能有多个提取常量重构可用,但用户通常希望提取到最近的局部变量。如果该重构代码操作标记为isPreferred,用户可以为其设置一个单独的快捷键:

{
  "key": "ctrl+shift+r ctrl+e",
  "command": "editor.action.codeAction",
  "args": {
    "kind": "refactor.extract.constant",
    "preferred": true
  }
}

修复所有源操作

新的 source.fixAll CodeActionKind 为可以自动修复文件中错误的扩展建立了一个约定。这种新的源操作类型类似于 组织导入,并且使得为修复所有操作配置快捷键或启用保存时自动修复变得容易:

// On save, run both fixAll and organizeImports source actions
"editor.codeActionsOnSave": {
    "source.fixAll": true,
    "source.organizeImports": true,
}

TSLint 扩展 已经使用 source.fixAll 代码操作类型来实现全部修复和保存时自动修复。

expandLineSelection的默认键绑定更改

命令 expandLineSelection 现在默认绑定到 Ctrl+L(在 macOS 上是 Cmd+L),而不是 Ctrl+ICmd+I)。

改进的列选择

通过将多光标修改键设置为使用Ctrl(在macOS上为Cmd"editor.multiCursorModifier": "ctrlCmd",因此Alt修改键仅用于转到定义,现在可以在编辑器中拖动选择时按下Alt修改键,以在常规选择和列选择之间切换。

在以下视频中,选择开始时是一个常规选择,然后按下并按住Alt键,直到鼠标按钮释放:

使用Alt键进行列选择

语言

TypeScript 3.3.3

此版本包括 TypeScript 3.3.3,这是一个小更新,修复了一些重要的错误

安装TypeScript扩展时无需重新加载

上一次迭代,VS Code 进行了更改,安装绝大多数扩展后不再需要重新加载。VS Code 现在还支持动态加载 TypeScript 插件扩展。当你安装一个新的 TypeScript 扩展时,例如 TSLint,扩展会自动启用,无需重新加载。

安装Markdown扩展时无需重新加载

此外,安装扩展后,如GitHub Markdown Preview,您不再需要重新加载VS Code。一旦安装了Markdown扩展,任何活动的Markdown预览将自动更新。

改进的HTML智能感知用于ARIA属性

感谢从W3CMDN获取的数据,VS Code现在可以显示ARIA(可访问的富互联网应用程序)属性和DOM事件的描述。

HTML IntelliSense for ARIA and Event attributes

HTML扩展中移除了Razor支持

传统的ASP.NET Razor支持已被移除。我们现在推荐使用C#扩展来编辑Razor文件。

调试

调试控制台的字体配置

现在可以使用以下设置来配置调试控制台中的字体大小、字体家族和行高:debug.console.fontSizedebug.console.fontFamilydebug.console.lineHeight

调试控制台字体

调试控制台文本换行

感谢新树形小部件的采用,调试控制台现在支持所有元素的自动文本换行,甚至包括对象内部的属性。

调试控制台换行

集成终端

发送序列命令中的变量支持

现在可以使用变量workbench.action.terminal.sendSequence命令,例如:

{
  "key": "ctrl+shift+t",
  "command": "workbench.action.terminal.sendSequence",
  "args": { "text": ". ${file}" }
}

预览功能

预览功能尚未准备好发布,但功能足够使用。我们欢迎您在开发过程中提供早期反馈。

调试服务器程序时自动打开URI

开发一个网页程序通常需要在网页浏览器中打开一个特定的URL,以便在调试器中触发服务器代码。在这个里程碑中,我们添加了一个新的VS Code功能的初步版本,该功能试图以一种灵活的方式自动化这个过程。

这是一个简单的Node.js Express应用程序示例:

var express = require('express');
var app = express();

app.get('/', function(req, res) {
  res.send('Hello World!');
});

app.listen(3000, function() {
  console.log('Example app listening on port 3000!');
});

此应用程序首先为“/”URL安装一个“Hello World”处理程序,然后开始在端口3000上监听HTTP连接。端口在调试控制台中宣布,通常开发者现在会在他们的浏览器应用程序中输入http://localhost:3000

新功能使得可以向任何启动配置添加结构化属性serverReadyAction并选择要执行的“操作”:

{
  "type": "node",
  "request": "launch",
  "name": "Launch Program",
  "program": "${workspaceFolder}/app.js",

  "serverReadyAction": {
    "pattern": "listening on port ([0-9]+)",
    "uriFormat": "http://localhost:%s",
    "action": "openExternally"
  }
}

这里的pattern属性描述了用于匹配程序输出字符串的正则表达式,该字符串宣布了端口。端口号的模式被放在括号中,以便它作为正则表达式捕获组可用。在这个例子中,我们只提取端口号,但也可以提取完整的URI。

uriFormat 属性描述了端口号如何转换为 URI。第一个 %s 由匹配模式的第一个捕获组替换。

生成的URI随后会在VS Code外部(“外部”)使用为该URI方案配置的标准应用程序打开。

或者,可以将action设置为debugWithChrome。在这种情况下,VS Code 会为 URI 启动一个 Chrome 调试会话(这需要安装Debugger for Chrome扩展)。在此模式下,可以添加一个webRoot属性,该属性会传递给 Chrome 调试会话。

为了简化一些事情,大多数属性是可选的,我们使用以下回退值:

  • pattern: "listening on.* (https?://\\S+|[0-9]+)" 匹配常用的消息 "listening on port 3000" 或 "Now listening on: https://localhost:5001"。
  • uriFormat: "http://localhost:%s"
  • webRoot: "${workspaceFolder}"

这里是该功能的实际应用:

服务器准备功能正在运行

请注意,在功能的预览版本中:

  • 该模式仅在调试控制台中匹配。如果调试目标在集成终端中启动,则尚不适用(并且在外置终端中永远不会适用)。
  • 如果配置了debugWithChrome但未安装Debugger for Chrome扩展,该功能不会发出警告。
  • 目前还无法使用其他基于浏览器的调试器。

扩展开发

为调试工具栏贡献命令

现在扩展可以向调试工具栏贡献命令。

这里是一个扩展的package.json示例:

"contributes": {
  "commands": [
    {
      "command": "dart.hotReload",
      "title": "Hot Reload",
      "icon": {
        "dark": "./media/hot_reload_inverse.svg",
        "light": "./media/hot_reload.svg"
      }
    }
  ],
  "menus": {
    "debug/toolbar": [
      {
        "command": "dart.hotReload",
        "when": "debugType == dart",
        "group": "dart"
      }
    ]
  }
}

该扩展在调试工具栏的右侧添加了一个“热重载”按钮。

添加到调试工具栏

SignatureHelpContext.activeSignatureHelp

SignatureHelpContext 对象现在有一个 activeSignatureHelp 字段,用于跟踪之前活动的签名:

import * as vscode from 'vscode';

class MySignatureHelpProvider implements vscode.SignatureHelpProvider {
    provideSignatureHelp(
        document: vscode.TextDocument,
        position: vscode.Position,
        token: vscode.CancellationToken,
        context: vscode.SignatureHelpContext
    ): vscode.ProviderResult<vscode.SignatureHelp> {
        // The active signature help when this provider was triggered or undefined if
        // no signature help was active.
        console.log(context.activeSignatureHelp);

        ...
    }
}

提供者可以使用此功能来跟踪在重新触发签名帮助提供者之前用户选择了哪个重载。

提议的扩展API

每个里程碑都伴随着新的提议API,扩展作者可以尝试使用它们。我们一如既往地重视您的反馈。以下是您尝试提议API需要做的事情:

  • 你必须使用Insiders,因为提议的API经常变化。
  • 您必须在扩展的package.json文件中包含这一行:"enableProposedApi": true
  • 将最新版本的vscode.proposed.d.ts文件复制到您的项目中。

请注意,您不能发布使用提议API的扩展。我们可能会在下一个版本中进行重大更改,并且我们从不希望破坏现有的扩展。

workspace.registerResourceLabelFormatter

export interface ResourceLabelFormatter {
  scheme: string;
  authority?: string;
  formatting: ResourceLabelFormatting;
}

export interface ResourceLabelFormatting {
  label: string; // myLabel:/${path}
  separator: '/' | '\\' | '';
  tildify?: boolean;
  normalizeDriveLetter?: boolean;
  workspaceSuffix?: string;
  authorityPrefix?: string;
}

export namespace workspace {
  export function registerResourceLabelFormatter(
    formatter: ResourceLabelFormatter
  ): Disposable;
}

扩展可以使用registerResourceLabelFormatter来动态贡献资源标签格式化器,这些格式化器指定了如何在工作台的各个位置显示URI。

工程

Linux 32位支持即将结束

VS Code 正在使用 Electron 作为框架以在多个平台上运行。我们目前使用的是 Electron 3.x 版本,这将是支持 32 位架构 Linux 的最后一个版本。由于我们计划很快(1-2 个月内)迁移到 Electron 4.x,这意味着 VS Code 将不再在 32 位 Linux 上运行。请 更新 您的 VS Code 版本到 64 位版本。您的所有设置和扩展将像以前一样工作,无需迁移任何内容。您可以阅读 Electron 的 相关博客文章 以获取更多信息。

严格空值进度

我们在严格空值检查主VS Code代码库方面继续取得了良好进展。在这个迭代中,我们将剩余的严格空值错误数量减少了一半,修复了超过2000个错误。我们仍然有大约1800个严格空值错误,其中许多是棘手的问题,但终点已经在望。

编译到ES6

VS Code 是用 TypeScript 编写的,而 TypeScript 会被编译成 JavaScript。TypeScript 可以针对不同的 JavaScript 版本,在这个版本中,我们针对的是 ES6 JavaScript。ES6 更接近 TypeScript,生成的代码更少,这意味着更快的加载时间。

注意: 这意味着我们的 JavaScript 输出使用了 classes 作为 JavaScript 中定义的类。我们有一个工具仍然允许函数从这些类“扩展”,并且我们为扩展作者创建了一个 跟踪项,以便现在也可以发出 ES6。一切应该仍然像以前一样工作,但我们鼓励每个人都加入 ES6 的行列。

对扩展的贡献

GitHub 拉取请求

在这个里程碑中,我们继续致力于改进GitHub Pull Requests扩展。

以下是一些新功能:

  • 在拉取请求描述页面上查看并分配审阅者和标签。
  • GitHub Pull Request 树视图现在显示在其自己的视图容器中。您还可以通过修改 githubPullRequests.showInSCM 选择在源代码控制视图中显示它们。
  • 查看和修改评论上的反应。

Vetur

Vetur 扩展现在为 Vue.js 的 插值 提供了 IntelliSense(智能补全)。

完成项来源于Vue.js的propsdatacomputedmethods API调用。源代码以及任何JSDoc文档都用作完成项的描述。

当从父组件使用子组件时,Vetur 还提供子组件 props 的智能感知。

Vetur 对 Vue 模板的智能感知

其他显著特点包括:

  • 使用 Prettier 作为 格式化工具的选项。
  • GraphQL 自定义块语法高亮。
  • Pug 插值语法高亮。

你可以了解更多关于Vetur功能的更新日志

新文档

使用 webpack 打包扩展

对于扩展作者来说,有一个新的打包扩展主题,关于如何使用webpack打包扩展文件以减少扩展加载时间。

webpack 标志

使用JavaScript

一篇新的使用JavaScript文章描述了VS Code支持的高级JavaScript功能。您将了解到将JavaScript项目文件(jsconfig.json)添加到代码中的好处,以及如何启用类型检查

显著的修复

  • 55084: 允许创建/打开包含反斜杠的文件名
  • 68204: 从路径如'folder/subfolder/file.txt'创建后,新文件未在资源管理器中显示
  • 68316: 新的工作区资源管理器树视图未能正确更新
  • 68616: 调试节点时命中断点但没有视觉指示(mocha测试)
  • 68691: 资源管理器中缺少创建新文件的输入框
  • 68627: '在侧边栏中显示` 不起作用
  • 67970: 新资源管理器:切换编辑器时应清除焦点

此版本还包括对Microsoft安全响应中心CVE-2019-5786的安全更新,您可以在此Electron博客文章中阅读相关内容。

感谢您

最后但同样重要的是,向以下帮助使VS Code变得更好的人们表示衷心的感谢!

对我们问题跟踪的贡献。如果您想帮助我们管理收到的问题,请参阅我们的社区问题跟踪页面:

vscode 的贡献:

vscode-languageserver-node的贡献:

node-jsonc-parser的贡献:

vscode-generator-code 的贡献:

vscode-vsce 的贡献:

vscode-recipes的贡献:

localization的贡献:

有超过700名云+AI本地化社区成员使用微软本地化社区平台(MLCP),其中约有100名活跃的贡献者为Visual Studio Code做出贡献。

我们感谢您的贡献,无论是通过提供新的翻译、对翻译进行投票,还是建议流程改进。

这是贡献者的快照。有关项目的详细信息,包括贡献者名单,请访问项目网站https://aka.ms/vscodeloc

  • 波斯尼亚语: Ismar Bašanović.
  • 保加利亚语: Любомир Василев.
  • 捷克语: Jakub Stibůrek, Samuel Tulach, Jan Brudný.
  • 丹麦语: Lasse Stilvang, Alexander Matzen, Johan Fagerberg.
  • 荷兰语: Jos Verlinde, Eric Algera.
  • 英语(英国): Mohammad Idrees。
  • 芬兰语: Petri Niinimäki, Riku Riikonen, Valtteri Vatanen.
  • 法语: Mohamed Sahbi, Antoine Griffard, Maxime COQUEREL, franto.
  • 德语: Frank Lindecke, Jakob von der Haar, Hans Meiser, Carsten Kneip, Sebastian Seidl.
  • 希腊语: Jim Spentzos, John D, Δημήτρης Παπαϊωάννου.
  • 希伯来语: Snir Broshi, Kyle Orin.
  • 印地语: Satish Yadav, Ashok Kumar Rathore, nirav adatiya, Amit Gusain, shaswat rungta, Jagjeet Singh, Pratishek PII, Chethana S, Dhanvi Kapila.
  • Chinese Simplified: Tingting Yi, 斌 项, feiyun0112 feiyun0112, 建东 薛, 刘瑞恒 刘瑞恒, Junzhe Liu, Dave Young, 昊宇 周, Joel Yang, Tony Xia, XIANG ZUO, Edi Wang, Zhiqiang Li, 福永 叶, G.Y. Z,Hao Hu, Pluwen, meng shao, YITING ZHU, Xiangrui Kong, Liam Kennedy, 松阳 樊, Young Bige, Justin Liu, Jessica Zhang, Licheng Ren, 驰 雷, 彦佐 刘, xiong Fu, Fan Su, Lynne Dong, 吉姆 舒, 游 尤, 剑秋, 陶, Hanlin Yang, bh wu, Y F, WangCG duoduobear, ziqiang sun, 越 郑, Jiang LI, 正元 刘, peng wei, 瑜 周, 仁松 陈, 翼 张, Ludi Fang, 九鼎 谭. Chinese Traditional: 奕濬 潘, Winnie Lin.
  • 匈牙利语: Péter Nagy, Dániel Tar.
  • 印度尼西亚语: Laurensius Dede Suhardiman, Afnizar Nur Ghifari, Pradipta Hendri, Azhe Kun, 意大利语(意大利), Bruni Luca, Alessandro Alpi, Andrea Dottor, Riccardo Cappello, Aldo Donetti, Michael Longo.
  • Japanese: nh, EbXpJ6bp -, Masakazu TENMYO, Takayuki Fuwa, Makoto Sakaguchi, 裕子 知念, Rie Moriguchi, Koichi Makino, Fujio Kojima, Kazuya Ujihara.
  • 韩语: Jong Heun Shin, Kyunghee Ko, Jae Yong Kum, SeungJin Jeong.
  • 挪威语: Cookius Monsterius, Stephan Eriksen.
  • 波兰语: Grzegorz Miros, Tomasz Świstak, Michal Szulc, Bartek PL, Szymon Seliga, Tomasz Chojnacki, Marcin Weksznejder, Artur Pelczar, Marcin Floryan, Jakub Jedryszek.
  • 葡萄牙语(巴西): Marcondes Alexandre, Albert Tanure, Marcelo Fernandes, Junior Galvão - MVP, Ray Carneiro, Eduardo Moura, Bruno Talanski, Bruno Sonnino, Jucinei Pereira dos Santos, Emmanuel Gomes Brandão, Flávio Albuquerque Camilo, Pablo Garcia, Lucas Miranda, Giuliano Reginatto, Alan William, Lucas Nunes, Gabriel Schade, arthurdenner., Mauricio Lima, Roberto Fonseca, Letticia Nicoli, Milton Camara, Alessandro Fragnani, Marcelo Guerra, Cynthia Zanoni, Jhonathan Soares, Rafael Laranja, Swellington Soares.
  • 葡萄牙语(葡萄牙): João Carvalho, Vitor Barbosa.
  • 俄语: michael v, Иван Лещенко.
  • 西班牙语: Andy Gonzalez, Alvaro Enrique Ruano, Engel Aguilar, Carlos Mendible, José María Aguilar, julian3xl, Ing. Sergio Uziel Tovar Lemus, Mario Mendieta, Jorge Serrano Pérez.
  • 泰米尔语: Mani M, Krishna Pravin, Vetri.
  • 土耳其语: Hüseyin Fahri Uzun, Okan Çetin, Muhammed Emin TİFTİKÇİ.
  • 乌克兰语: Did Kokos.
  • 越南语: Việt Anh Nguyễn, Belikhun.