现已推出!阅读 10 月份的新功能和修复。

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


欢迎使用 Visual Studio Code 2019 年 2 月版。此版本包含许多重要更新,我们希望您会喜欢。以下是一些关键亮点:

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

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

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

内部人员:想尽快看到新功能?您可以下载夜间 内部人员 构建并尽快尝试最新的更新。有关最新的 Visual Studio Code 新闻、更新和内容,请关注 Twitter @code

工作台

预览和应用新主题

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

Applying Theme

键盘快捷键编辑器

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

Changing When expression

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

直接编辑 keybindings.json 文件时,左侧不再显示默认键绑定。如果您希望看到 默认键绑定,可以选中 工作台 > 设置:打开默认键绑定 设置(workbench.settings.openDefaultKeybindingstrue)。

自动键盘导航设置

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

以下是使用 / 为文件资源管理器切换键盘导航的键绑定

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

Linux 上的默认标题栏样式

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

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

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

编辑器

悬停和问题窥视改进

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

Problem Hover

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

Problem Peek

我们还改进了悬停和问题窥视视图的外观。带有问题和代码块的悬停会留出足够的空白来显示其内容

Hover

自动修复和首选代码操作

代码操作 API 为 VS Code 的快速修复(您在编辑器中看到的灯泡)提供支持。虽然可能存在许多针对特定错误的快速修复,但通常其中有一个是对问题的最合理修复。例如,修复拼写错误通常比生成新字段更可能是合理的修复。

扩展现在可以将代码操作标记为“首选”,以表明它是对底层问题的最合理修复。如果存在首选修复,则会在灯泡中添加一个蓝色徽章。可以使用 自动修复 命令(⌥⌘. (Windows, Linux Shift+Alt+.))自动应用首选修复。

Preferred fixes are indicated with a blue badge on the lightbulb

首选快速修复通常应

  • 正确修复底层错误(而不是抑制错误)。
  • 成为错误的合理修复。
  • 不要意外地执行广泛的操作。

重构代码操作也可以标记为首选,以表明它们是最合理的重构。例如,虽然可能存在多个 提取常量 重构,但用户通常希望提取到最近的局部变量。如果该重构代码操作标记为 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,
}

the TSLint 扩展 已经使用 source.fixAll 代码操作种类来实现修复所有操作和在保存时自动修复。

expandLineSelection 的默认键绑定更改

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

改进了列选择

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

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

Column Selection with the Alt key

语言

TypeScript 3.3.3

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

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

上次迭代,VS Code 已更改为不再需要在安装大多数扩展后重新加载。VS Code 现在还支持 TypeScript 插件扩展 的动态加载。安装新的 TypeScript 扩展(例如 TSLint)时,扩展会自动启用,无需重新加载。

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

此外,您不再需要在安装扩展(例如 GitHub Markdown 预览)后重新加载 VS Code。任何活动的 Markdown 预览将在安装 Markdown 扩展后立即自动更新。

改进了 HTML IntelliSense 对 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

Debug Console font

调试控制台文本换行

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

Debug Console wrap

集成终端

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

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

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

预览功能

预览功能尚未准备好发布,但功能足够强大,可以供您使用。我们欢迎您在开发期间提供早期反馈。

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

开发 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 连接。端口在调试控制台中公布,通常开发人员现在会在其浏览器应用程序中输入 https://127.0.0.1:3000

新功能使您可以在任何启动配置中添加一个结构化属性 serverReadyAction,并选择要执行的“操作”。

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

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

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

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

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

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

为了简化操作,大多数属性都是可选的,我们使用以下回退值。

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

以下是该功能的实际应用。

Server ready feature in action

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

  • 该模式仅在调试控制台中匹配。如果调试目标在集成终端中启动(并且永远不会在外部终端中启动),它将不起作用。
  • 如果配置了 debugWithChrome 但未安装 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"
      }
    ]
  }
}

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

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

        ...
    }
}

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

建议的扩展 API

每个里程碑都包含新的提议 API,扩展作者可以尝试使用它们。一如既往,我们渴望获得您的反馈。以下是尝试使用提议 API 的步骤。

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

严格的空值进度

我们继续朝着 严格检查主要 VS Code 代码库中的空值 迈进。在本迭代中,我们将剩余的严格空值错误数量减少了一半,修复了 2000 多个错误。我们还有大约 1800 个严格空值错误,其中许多错误是棘手的错误,但结局已近在眼前。

编译到 ES6

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

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

对扩展的贡献

GitHub 拉取请求

在此里程碑中,我们继续改进 GitHub 拉取请求 扩展。

以下是一些新功能。

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

Vetur

现在,Vetur 扩展为 Vue.js 插值 提供 IntelliSense(智能完成)。

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

在从父组件使用子组件时,Vetur 也会在子组件的 props 上提供 IntelliSense。

Vetur IntelliSense for Vue templates

其他值得注意的功能包括

  • 将 Prettier 用作 <template> 格式化程序的选项。
  • GraphQL 自定义块语法突出显示。
  • Pug 插值语法突出显示。

您可以在 Vetur 的 变更日志 中详细了解这些功能。

新文档

使用 webpack 打包扩展

对于扩展作者,有一个新的 打包扩展 主题,介绍如何使用 webpack 打包扩展文件以缩短扩展加载时间。

webpack logo

使用 JavaScript

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

值得注意的修复

  • 55084: 允许创建/打开包含反斜杠的文件名
  • 68204: 从类似于“folder/subfolder/file.txt”的路径创建新文件后,新文件不会显示在资源管理器中
  • 68316: 新的工作台资源管理器树视图无法正确更新
  • 68616: 调试点被命中,但在调试 nodejs(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 本地化 社区成员使用 Microsoft 本地化社区平台 (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。
  • 简体中文: 奕婷 易, 斌 项, 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, 九鼎 谭. 繁体中文: 奕濬 潘, 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。
  • 日语: 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。