February 2019 (version 1.32)

更新: -问题在每个更新中解决1.32.3 - 1.32.2 - 1.32.1

下载:Windows: 用户 系统 | Mac | Linux 64位: deb rpm tarball | Linux 32位: deb rpm tarball


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

如果您想在线阅读这些发行说明,请访问code.visualstudio.com上的更新 .
您还可以查看来自Cloud Developer Advocate Brian Clark的 1.32版本重点视频 .

在与VS Code重点领域相关的以下各节中安排了发行说明. 以下是一些进一步的更新:

  • 工作台 -键盘导航控件,"大纲"视图和面包屑使用树小部件.
  • 编辑器 -修复所有源操作允许您修复保存的,改进的列选择.
  • 语言 -安装TypeScript和Markdown扩展时不需要重新加载.
  • 扩展创作 -将命令添加到"调试"工具栏,跟踪最后一个方法签名的选择.

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

Workbench

Preview and apply new themes

现在,您可以在安装有助于主题的扩展程序后立即预览并应用颜色和文件图标主题.

Applying Theme

Keyboard Shortcuts editor

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

Changing When expression

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

直接编辑keybindings.json文件时,默认的绑定不再显示在左侧. 如果您希望查看Default Keybindings ,则可以检查Workbench>设置:打开Default Keybindings设置( workbench.settings.openDefaultKeybindingstrue ).

Automatic Keyboard Navigation setting

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

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

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

Default title bar style on Linux

听取用户的反馈后,我们已恢复我们的默认设置的变化决定window.titleBarStylecustom回到native Linux上. 对于需要更好的辅助功能支持的用户,我们仍然建议使用自定义标题栏. 有关此更改的更多信息,请参见我们的Linux设置页面.

New tree widget for Outline and Breadcrumbs

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

Editor

Hover and Problems peek improvements

在此版本中,具有" 快速修复"和"查看问题"操作的命令栏已添加到"问题"悬停中. " 快速修复"操作将应用悬停中的"快速修复",并且" 窥视问题"操作将在编辑器中打开窥视视图.

Problem Hover

现在,从"问题"查看视图中,您可以导航到上一个和下一个错误/警告.

Problem Peek

我们还改进了悬停的外观和"问题"透视图. 具有问题和代码块的徘徊者有足够的空间来显示其内容:

Hover

Auto fix and preferred Code Actions

Code Action API为VS Code的快速修复(您在编辑器中看到的灯泡)提供了动力. 尽管对于给定的错误可能有许多快速修复方法,但通常有一种方法是最合理的解决方法. 例如,修复拼写错误通常比生成新字段更可能解决.

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

Preferred fixes are indicated with a blue badge on the lightbulb

首选快速修复通常应:

  • 正确修复潜在错误(而不是抑制错误).
  • 对错误进行合理的修复.
  • 不要意外地执行大量操作.

重构代码操作也可以标记为首选,以指示它们是最合理的重构. 例如,虽然可以使用多个Extract常量重构,但用户通常希望提取到最近的本地. 如果该重构代码操作标记为isPreferred ,则用户可以为其设置单个键绑定:

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

Fix All Source Actions

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

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

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

Default keybinding change for expandLineSelection

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

Improved column selection

将" Multi Cursor Modifier"设置配置为使用Ctrl (在macOS上为Cmd"editor.multiCursorModifier": "ctrlCmd" ,因此Alt修饰符仅用于"转到定义",现在可以在拖动"editor.multiCursorModifier": "ctrlCmd"时按下Alt修饰符.编辑器中的选择以在常规选择或列选择之间切换.

在下面的视频中,选择作为常规选择开始,然后Alt直到释放鼠标按钮:

Column Selection with the Alt key

Languages

TypeScript 3.3.3

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

No reload required when installing TypeScript extensions

在最后一次迭代中 ,VS Code被更改为在安装了绝大多数扩展后不再需要重新加载. VS Code现在还支持动态加载TypeScript插件扩展 . 当安装新的TypeScript扩展名(例如TSLint)时 ,将自动启用该扩展名,而无需重新加载.

No reload required when installing Markdown extensions

此外,在安装诸如GitHub Markdown Preview之类的扩展程序后,您不再需要重新加载VS Code. 安装了Markdown扩展程序后,所有活动的Markdown预览都会自动更新.

Improved HTML IntelliSense for ARIA attributes

多亏了从W3CMDN检索到的数据,VS Code现在可以显示ARIA(可访问的Rich Internet Applications)属性和DOM事件的描述.

HTML IntelliSense for ARIA and Event attributes

Removed Razor support in HTML extension

旧的ASP.NET Razor支持已被删除. 现在,我们建议使用C#扩展名来编辑Razor文件.

Debugging

Font configuration for Debug Console

现在,可以使用以下设置在调试控制台中配置字体大小,字体系列和行高: debug.console.fontSizedebug.console.fontFamilydebug.console.lineHeight .

Debug Console font

Debug Console text wrapping

由于采用了新的树小部件,调试控制台现在支持对其所有元素甚至对象内部的属性进行自动文本包装.

Debug Console wrap

Integrated Terminal

Variable support in send sequence command

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

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

Preview features

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

Automatically open a URI when debugging a server program

开发Web程序通常需要在Web浏览器中打开特定的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调试会话.

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

  • 模式"listening on.* (https?://\\S+|[0-9]+)"与常用消息"正在监听端口3000"或"现在正在监听:https:// localhost:5001 "listening on.* (https?://\\S+|[0-9]+)"匹配".
  • uriFormat: "http://localhost:%s"
  • webRoot: "${workspaceFolder}"

这里的功能正在发挥作用:

Server ready feature in action

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

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

Extension Authoring

Contributing commands to debug toolbar

现在,扩展程序可以将命令添加到调试工具栏.

这是扩展的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"
      }
    ]
  }
}

该扩展添加了一个"热重载"按钮,在调试工具栏的右侧可以看到.

Add to debug toolbar

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);

        ...
    }
}

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

Proposed extension APIs

每个里程碑都随附新提出的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.

Engineering

Linux 32-bit support ends soon

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

Strict null progress

我们继续在严格的null检查主VS Code代码库方面取得良好进展. 通过这次迭代,我们将剩余的严格空错误数减少了一半,修复了2000多个错误. 我们仍然存在大约1800个严格的空错误,并且剩余的许多错误都是棘手的错误,但最终的结果已经显现.

Compiling to ES6

VS Code编写为TypeScript,TypeScript编译为JavaScript. TypeScript可以针对不同的JavaScript版本,而在此发行版中,我们针对的是ES6 JavaScript. ES6更接近TypeScript,并且生成的代码更少,这意味着更快的加载时间.

注意:这意味着我们的JavaScript输出使用JavaScript中定义的 . 我们拥有一个实用程序,该实用程序仍然允许函数从那些类中"扩展",并且我们为扩展作者创建了一个跟踪项 ,现在也可以发出ES6. 一切仍应照常进行,但我们鼓励所有人上ES6火车.

Contributions to Extensions

GitHub Pull Requests

This milestone we continued working on improvements to the GitHub Pull Requests extension.

以下是一些新功能:

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

Vetur

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

完成项目从Vue.js采购propsdatacomputedmethods的API调用. 源代码以及任何JSDoc文档都用作完成项目描述.

使用父级组件中的子级组件时,Vetur还会在子级组件的props上提供IntelliSense.

Vetur IntelliSense for Vue templates

其他值得注意的功能包括:

  • 使用Prettier作为<template>格式程序的选项.
  • GraphQL自定义块语法突出显示.
  • 哈巴狗插值语法突出显示.

您可以在Vetur的Changelog中了解有关功能的更多信息.

New documentation

Bundling extensions with webpack

对于扩展作者来说,有一个关于捆绑扩展文件与Webpack捆绑在一起的新捆绑扩展主题,以减少扩展加载时间.

webpack logo

Working with JavaScript

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

Notable fixes

  • 55084 :允许创建/打开包含反斜杠的文件名
  • 68204 :从"文件夹/子文件夹/file.txt"之类的路径创建后,新文件不会显示在资源管理器中
  • 68316 :新的工作台资源管理器树视图无法正确更新
  • 68616 :调试nodejs(mocha测试)时,调试点受到攻击,但没有视觉指示
  • 68691 :无输入框可在资源管理器中创建新文件
  • 68627 :" 侧边栏中的显示不起作用"
  • 67970 :新资源管理器:切换编辑人员应清除焦点

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

Thank you

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

对我们的问题跟踪的贡献. 如果您想帮助我们管理传入的问题,请参见我们的社区问题跟踪页面:

vscode贡献:

vscode-languageserver-node贡献:

node-jsonc-parser贡献:

vscode-generator-code贡献:

vscode-vsce贡献:

vscode-recipes贡献:

localization贡献:

有超过700个使用Microsoft Localization Community Platform(MLCP)的Cloud + AI Localization社区成员,其中大约100个是Visual Studio Code的活跃参与者.

通过提供新的翻译,对翻译进行投票或建议改进流程,我们对您的贡献表示感谢.

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

  • Bosnian: Ismar Bašanović.
  • 保加利亚语: ЛюбомирВасилев.
  • 捷克语:雅各布·斯蒂伯雷克(JakubStibůrek),塞缪尔·塔拉赫(Samuel Tulach),扬·布鲁德尼(JanBrudný).
  • 丹麦语:拉瑟·史迪文( Lasse Stilvang),亚历山大·麦岑(Alexander Matzen),约翰·法格伯格(Johan Fagerberg).
  • 荷兰语:乔斯·弗林德(Jos Verlinde),埃里克·阿尔杰拉(Eric Algera).
  • 英语(英国): Mohammad Idrees.
  • 芬兰语: PetriNiinimäki,Riku Riikonen,Valtteri Vatanen.
  • 法语:穆罕默德·萨比(Mohamed Sahbi),安托万·格里费德(Antoine Griffard),马克西姆·科奎勒(Maxime COQUEREL),法国人.
  • 德语:弗兰克·林德克(Frank Lindecke),雅各布·冯·德·哈尔(Jakob von der Haar),汉斯·迈瑟(Hans Meiser),卡斯滕·克奈普(Carsten Kneip),塞巴斯蒂安·塞德尔(Sebastian Seidl).
  • 希腊语:吉姆·斯彭佐斯(Jim Spentzos),约翰·D(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,福永叶, GY 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, YF, WangCG duoduobear, ziqiang sun, 越郑, Jiang LI, 正元刘, peng wei, 瑜周, 仁松陈, 翼张, Ludi Fang, 九鼎谭. Chinese Traditional:奕浚潘, Winnie Lin.
  • 匈牙利语: PéterNagy,Daniel Tar.
  • 印尼文: Laurensius Dede Suhardiman,Afnizar Nur Ghifari,Pradipta Hendri,Azhe Kun,意大利语(意大利),Bruni Luca,Alessandro Alpi,Andrea Dottor,Riccardo Cappello,Aldo Donetti,Michael Longo.
  • 日语: nh,EbXpJ6bp-,Masakazu TENMYO,Takayuki Fuwa,Sakaguchi Makoto,Yuko Chinen,Rie Moriguchi,Koichi Makino,Fujio Kojima,Kazuya Ujihara.
  • 朝鲜语:钟宪信,高庆熙,在Yong金,郑进正.
  • 挪威语: 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,初级Galvão-MVP,Ray Carneiro,Eduardo Moura,Bruno Talanski,Bruno Sonnino,Jucinei Pereira dos Santos,Emmanuel GomesBrandão,FlávioAlbuquerque Camilo,Pablo Garcia,Lucasanda Giuliano Reginatto,Alan William,Lucas Nunes,Gabriel Schade,arthurdenner.
  • 葡萄牙语(葡萄牙):若昂·卡瓦略(JoãoCarvalho ,维托尔·巴博萨(Vitor Barbosa).
  • 俄语:迈克尔五世,伊万·列先科.
  • 西班牙语:安迪·冈萨雷斯(Andy Gonzalez),阿尔瓦罗·恩里克·鲁阿诺(Alvaro Enrique Ruano),恩格尔·阿吉拉尔(Engel Aguilar),卡洛斯·门迪布(Carlos Mendible),何塞·玛丽亚·阿吉拉尔(JoséMaríaAguilar),julian3xl,Ing.塞尔吉奥·乌齐尔·托瓦尔·勒穆斯(Sergio Uziel Tovar Lemus),马里奥·门迪埃塔(Mario Mendieta),豪尔赫·塞拉诺·佩雷斯(Jorge SerranoPérez).
  • 泰米尔语: Mani M,克里希纳·普拉文,维特里.
  • 土耳其语: HüseyinFahri Uzun,OkanÇetin,Muhammed EminTİFTİKÇİ.
  • 乌克兰语:科科斯(Did Kokos).
  • 越南语:越南人Anh Nguyen,勿里坤.