參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

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 月版。此版本包含多項重要更新,我們希望您會喜歡,其中一些主要亮點包括

如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。
您還可以觀看 Cloud Developer Advocate Brian Clark 製作的 1.32 版本亮點影片

釋出說明按以下與 VS Code 重點領域相關的部分進行排列。以下是一些進一步的更新

  • 工作臺 - 鍵盤導航控制,大綱檢視和麵包屑使用樹形小部件。
  • 編輯器 - “全部修復”源操作允許您在儲存時修復,改進了列選擇。
  • 語言 - 安裝 TypeScript 和 Markdown 擴充套件時無需重新載入。
  • 擴充套件創作 - 向除錯工具欄新增命令,跟蹤上次方法簽名選擇。

Insiders:想盡快看到新功能嗎?您可以下載每夜更新的 Insiders 構建版本,並第一時間嘗試最新的更新。有關最新的 Visual Studio Code 新聞、更新和內容,請在 Twitter 上關注我們 @code

工作臺

預覽和應用新主題

您現在可以在安裝提供顏色主題和檔案圖示主題的擴充套件後立即預覽和應用它們。

Applying Theme

鍵盤快捷方式編輯器

您現在可以在“鍵盤快捷鍵”編輯器中編輯鍵盤繫結的 when 子句。

Changing When expression

我們從“鍵盤快捷鍵”編輯器中移除了開啟 keybindings.json 檔案的連結,取而代之的是編輯器標題欄右側的 {} 按鈕。

直接編輯 keybindings.json 檔案時,預設鍵盤繫結不再顯示在左側。如果您更喜歡檢視預設鍵盤繫結,您可以選中工作臺 > 設定:開啟預設鍵盤繫結設定 (將 workbench.settings.openDefaultKeybindings 設定為 true)。

自動鍵盤導航設定

新的設定列表:自動鍵盤導航控制列表和樹是否捕獲字典序按鍵以導航和過濾元素。如果停用,鍵盤導航將變為模式,list.toggleKeyboardNavigation 命令將切換其狀態。您可以為該命令分配特定的鍵盤快捷鍵。例如,您可以將其設定為 /,並且只有在按下 / 後,後續按鍵才會過濾列表/樹中的專案。此設定預設啟用。

以下是用於檔案資源管理器中使用 / 切換鍵盤導航的鍵盤繫結

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

Linux 上的預設標題欄樣式

在聽取使用者反饋後,我們決定將 Linux 上 window.titleBarStyle 的預設設定從 custom 恢復為 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,
}

TSLint 擴充套件已使用 source.fixAll 程式碼操作型別來實現全部修復和儲存時自動修復。

expandLineSelection 的預設鍵盤繫結更改

命令 expandLineSelection 現在預設繫結到 Ctrl+L(macOS 上為 Cmd+L),而不是 Ctrl+I(macOS 上為 Cmd+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 Preview 等擴充套件後,您不再需要重新載入 VS Code。任何活動的 Markdown 預覽都將在安裝 Markdown 擴充套件後立即自動更新。

改進的 HTML ARIA 屬性 IntelliSense

得益於從 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://:3000

新功能允許向任何啟動配置新增結構化屬性 serverReadyAction 並選擇要執行的“操作”

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

  "serverReadyAction": {
    "pattern": "listening on port ([0-9]+)",
    "uriFormat": "https://:%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://:5001”。
  • uriFormat"https://:%s"
  • webRoot"${workspaceFolder}"

這是該功能的實際應用

Server ready feature in action

請注意,在該功能的預覽版中

  • 模式僅在“除錯控制檯”中匹配。如果除錯目標在整合終端中啟動,它尚不起作用(並且永遠不會在外部終端中起作用)。
  • 如果配置了 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"
      }
    ]
  }
}

該擴充套件在除錯工具欄的右側添加了一個“熱過載”按鈕。

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 所需的操作:

  • 您必須使用 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 將不再在 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 Pull Requests 擴充套件。

以下是一些新功能

  • 在拉取請求描述頁面上檢視和分配審閱者和標籤。
  • 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:除錯節點(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 名 Cloud + 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。