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

2019 年 4 月(版本 1.34)

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

欢迎使用 2019 年 4 月版的 Visual Studio Code。在 4 月份,我们一直在忙于 **远程开发** 扩展的预览版。这些扩展可以让您通过 SSH 在远程机器或虚拟机上,在 Windows Subsystem for Linux (WSL) 中或在 Docker 容器内使用 VS Code。您可以阅读 使用 Visual Studio Code 进行远程开发 博客文章以了解更多信息。

在这个版本中,我们还进行了一些其他更新,我们希望您也会喜欢,以及许多社区贡献。

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

编辑器

稳定版 CodeLens

VS Code 现在会乐观地缓存 CodeLens 位置,并在切换编辑器后立即恢复它们。这修复了在切换编辑器时 CodeLens 行会略微移动的问题。

Stable CodeLens

语言

降低带供应商前缀的 CSS 属性值的排名

以破折号“ - ”(例如“ -moz-grid ”或“ -ms-grid ”)为前缀的 CSS 属性值,现在在自动完成中位于“ grid ”之后。

调试

debug.showSubSessionsInToolBar

我们引入了设置“ debug.showSubSessionsInToolBar ”,它控制是否在调试工具栏中显示调试子会话。当此设置为 false 时,在子会话上的停止命令也会停止父会话。此设置的默认值为 false。

任务

终止所有任务

**任务:终止任务** 命令有一个新的选项,如果有多个任务正在运行,则终止所有任务。如果您经常执行此操作,则可以使用“ terminateAll ”参数为该命令创建键盘快捷键。

{
  "key": "ctrl+k t",
  "command": "workbench.action.tasks.terminate",
  "args": "terminateAll"
}

自动显示问题面板

新的“ revealProblems ”任务属性允许您自动显示问题面板。属性值是“ always ”、“ never ”和“ onProblem ”。

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "npm",
      "script": "watch",
      "problemMatcher": "$tsc-watch",
      "isBackground": true,
      "presentation": {
        "reveal": "always",
        "revealProblems": "onProblem"
      }
    }
  ]
}

对扩展的贡献

预览:远程开发

❗ **注意:** **远程开发扩展** 需要 **Visual Studio Code Insiders**。

**Visual Studio Code 远程开发** 允许您使用容器、远程机器或 Windows Subsystem for Linux (WSL) 作为功能齐全的开发环境。

位于 远程开发扩展包 中的扩展在远程工作区的上下文中运行,而 VS Code 的感觉与您在本地运行时相同。

Vetur

现在,Vetur 扩展提供了语义诊断、悬停信息、跳转到定义和查找引用,适用于 Vue 模板插值区域内的 JavaScript 表达式。

Vetur JavaScript support in interpolations

您可以在 Vetur 文档 中阅读有关此功能的更多信息。

其他改进包括降低内存使用量和导入路径完成。您可以在 Vetur 变更日志 中了解有关它们的更多信息。

扩展编写

多扩展调试

在此里程碑中,我们添加了对一次调试多个扩展的支持。如果您正在开发一组紧密耦合或相互依赖的扩展,这将非常有用。

以前此功能仅通过 VS Code 的命令行界面提供,现在可以多次指定参数“ --extensionDevelopmentPath ”。通常,“ --extensionDevelopmentPath ”用于扩展的启动配置中。在开发多个扩展时,我们建议将各个扩展项目合并到一个多文件夹工作区中,并创建一个新的启动配置(存储在工作区“ .code-workspace ”文件中),该配置使用多个“ --extensionDevelopmentPath ”参数来表示各个扩展。

以下是一个示例工作区“ .code-workspace ”文件,其中包含两个扩展“ hello1 ”和“ hello2 ”,以及这两个扩展的单个启动配置

{
  "folders": [{ "path": "hello1" }, { "path": "hello2" }],
  "launch": {
    "configurations": [
      {
        "type": "extensionHost",
        "request": "launch",
        "name": "Launch Two Extensions",
        "args": [
          "--extensionDevelopmentPath=${workspaceFolder:hello1}",
          "--extensionDevelopmentPath=${workspaceFolder:hello2}"
        ],
        "outFiles": [
          "${workspaceFolder:hello1}/out/**/*.js",
          "${workspaceFolder:hello2}/out/**/*.js"
        ]
      }
    ]
  }
}

请注意,在此版本中,无法创建构建两个扩展的“ preLaunchTask ”,方法是组合各个扩展项目的“ preLaunchTask ”。

始终可以通过语法“ [链接名称](http://链接) ”在通知消息中包含链接,但这仅适用于在浏览器中打开的链接。现在,您还可以通过语法“ [链接名称](command:<命令 ID>) ”从链接调用命令。当用户点击链接时,将触发具有提供的标识符的命令。

现在,您可以在通知中的链接中添加标题,当用户将鼠标悬停在链接上时,该标题将显示。语法是“ [链接名称](链接 “<标题>”) ”。

建议的扩展 API

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

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

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

vscode.workspace.workspaceFile

有一个新的工作区属性返回工作区文件的位置。例如:“ file:///Users/name/Development/myProject.code-workspace ”或“ untitled:1555503116870 ”(用于未命名且尚未保存的工作区)。

根据打开的工作区,该值将为:

  • 未打开工作区或仅打开单个文件夹时为“ undefined ”。
  • 工作区文件路径,作为“ Uri ”。

如果工作区未命名,则返回的 URI 将使用“ untitled: ”方案。

工作区文件位置的一种用途是调用“ vscode.openFolder ”命令以在工作区关闭后再次打开它。

vscode.commands.executeCommand('vscode.openFolder', uriOfWorkspace);

**注意:** 不建议使用“ workspace.workspaceFile ”位置直接将配置数据写入文件。您可以使用“ workspace.getConfiguration().update() ”,它在打开单个文件夹以及未命名或已保存的工作区时都有效。

特定于机器的设置

如果您有允许用户自定义可执行文件路径的设置,并且这些路径需要范围到其运行的机器,那么现在您可以将这些设置归类为“ machine ”范围。扩展作者在贡献到“ configuration ”扩展点时会设置“ scope ”属性。特定于机器的设置只能为用户设置配置。

"configuration": {
  "title": "Git",
  "properties": {
   "git.path": {
      "type": [
        "string",
        "null"
      ],
      "markdownDescription": "Path and filename of the git executable.",
      "default": null,
      "scope": "machine"
    }
  }
}

工程

重写本地文件的系统文件提供程序

扩展能够为自定义资源提供他们自己的系统文件实现(在此处阅读更多信息)。但是,VS Code 本身对本地文件的实现并未使用相同的扩展 API。这导致在处理本地文件资源时与来自扩展的资源相比存在细微的差异。在过去的两个里程碑中,我们 重写了我们的本地文件系统提供程序 以使用扩展 API 以确保一致性。

新文档

Python Azure 函数

有一个新的 将 Python 部署到 Azure 函数 教程,其中描述了如何创建和部署 Python 无服务器 Azure 函数。

其他

语言服务器协议

已建议 语言服务器协议 支持以下新功能

  • 选择范围:计算一组位置的选择范围。从客户端发送到服务器。
  • 调用层次结构:计算给定符号的调用层次结构。从客户端发送到服务器。
  • 进度:从服务器启动进度报告。从服务器发送到客户端。

这些新功能在“ vscode-languageclient ”和“ vscode-languageserver ”npm 模块的下一版本中可用。

重要修复

  • 48259:资源管理器尊重系统文件提供程序的垃圾箱功能
  • 68276:调用堆栈“暂停在断点上”UI 对于长线程名称不可见
  • 69603:终端窗口在 Mac OS 中崩溃
  • 72110:调试控制台渲染不必要的换行符
  • 71737:调试窗口中的滚动行为异常
  • 71588:在资源管理器中显示文件时出错
  • 70492: “报告问题”按钮在“正在运行的扩展”中会导致大量重复问题

感谢

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

对我们的问题跟踪的贡献。如果您想帮助我们管理传入的问题,请查看我们的 社区问题跟踪 页面

vscode 的贡献

vscode-css-languageservice 的贡献

vscode-html-languageservice 的贡献

node-jsonc-parser 的贡献

language-server-protocol 的贡献

vscode-languageserver-node 的贡献

vscode-eslint 的贡献

vscode-lsif-extension 的贡献

vscode-textmate 的贡献

vscode-recipes 的贡献

vscode-vsce 的贡献

localization 的贡献

有超过 800 个 云 + AI 本地化 社区成员使用 Microsoft 本地化社区平台 (MLCP),其中约有 100 名积极贡献者为 Visual Studio Code 贡献代码。

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

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

  • **波斯尼亚语:** Ismar Bašanović。
  • **捷克语:** Daniel Padrta, David Jareš, Jan Hajek, Jiří Hofman。
  • **丹麦语:** Allan Kimmer Jensen, Thomas Larsen。
  • **荷兰语:** Maxim Van Damme, Sven Klaasen。
  • **英语(英国):** Martin Littlecott, Tobias Collier, William Wood, Giorgi Jambazishvili。
  • **法语:** Antoine Griffard, Thierry DEMAN-BARCELÒ, Mohamed Sahbi, Steven Dugois, Michael VAUDIN。
  • **德语:** Christof Opresnik。
  • **印地语:** Abhirav Kushwaha, Pramit Das。
  • **简体中文:** paul cheung, 项斌, Fan Su, Justin Liu, Horie Yuan, 王文杰, 赵畅畅, anson zhang, 王德邦, Pluwen, 朱逸婷, 杨浩然, 张迈克, 钟擎, 徐涛, 谈少民, 全伟, panda small, 张数组, 赵莉。
  • **繁体中文:** 謝政廷, 雪煾。
  • **匈牙利语:** Levente Hallai Seiler。
  • **印度尼西亚语:** Laurensius Dede Suhardiman。
  • **意大利语:** Alessandro Alpi, Luigi Bruno, Emanuele Meazzo, Marco Dal Pino。
  • 日语: EbXpJ6bp -, nh, 内田京平, 尾崎良久, 桃本誠司, 長冨, 熊本 迪人, 牧野浩一, 森山京平, 山本美穂, 徳田彩.
  • 韩语: 이형섭, 김영재, 이시인, 이근엽.
  • 拉脱维亚语: Kaspars Bergs.
  • 立陶宛语: Augustas Grikšas.
  • 波兰语: Wojciech Maj, Marek Biedrzycki, Igor 05, Marcin Weksznejder, Szymon Seliga, Paweł Modrzejewski, ‎Michał Stojke, Artur Zdanowski.
  • 葡萄牙语 (巴西): Alessandro Trovato, Judson Santiago, Roberto Fonseca, Marcelo Fernandes, Lucas Miranda, Ray Carneiro, Loiane Groner, Daniel Luna, Lucas Santos, Saymon Damásio.
  • 葡萄牙语 (葡萄牙): Ana Rebelo, Pedro Teixeira, João Carvalho, Tiago Antunes.
  • 罗马尼亚语: Alexandru Staicu.
  • 俄语: Андрей Веселов, Дмитрий Кирьянов, Ната Казакова, Валерий Батурин.
  • 西班牙语: Andy Gonzalez, Carlos Mendible, José María Aguilar, Alvaro Enrique Ruano.
  • 泰米尔语: Boopesh Kumar, Karunakaran Samayan, Merbin J Anselm.
  • 土耳其语: mehmetcan gun, Sinan Açar, S. Ferit Arslan.
  • 乌克兰语: Sviatoslav Ivaskiv, George Molchanyuk.
  • 越南语: Khôi Phạm, Spepirus Shouru, Việt Anh Nguyễn.