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

2021 年 2 月 (1.54 版)

更新 1.54.1:此更新解決了擴充套件依賴項的問題

更新 1.54.2:此更新解決了這些問題

更新 1.54.3:此更新解決了此問題

下載:Windows:x64 Arm64 | Mac:通用 Intel Apple 晶片 | Linux:deb rpm tarball Arm snap


歡迎使用 Visual Studio Code 2021 年 2 月版。此版本中有許多更新,我們希望您會喜歡,其中一些主要亮點包括:

如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。

太平洋時間 3 月 11 日星期四上午 8 點(倫敦時間下午 4 點)加入我們,觀看 VS Code 團隊的直播,瞭解此版本的新功能演示並向我們提問。

內測版:想盡快嘗試新功能?您可以下載每晚的內測版構建,並儘快嘗試最新的更新。

Apple 晶片

我們很高興在此迭代中釋出了第一個穩定的 Apple 晶片構建版本。使用 M1 晶片的 Mac 使用者現在可以在沒有 Rosetta 模擬的情況下使用 VS Code,並且在執行 VS Code 時會注意到更好的效能和更長的電池續航時間。感謝社群使用 Insiders 構建進行自託管並在迭代早期報告問題。

macOS 的 VS Code 預設下載現在是通用構建,可在所有 Mac 上原生執行。在下載頁面上,您可以找到更多針對 Intel 或 Apple 晶片的特定架構構建的連結,與通用軟體包相比,這些下載更小。

Website showing the new downloads view for Apple Silicon builds

Website showing the default download for macOS

輔助功能

工具欄和選項卡佔用一個 Tab 停止位

工作臺中所有工具欄現在都遵循標準導航行為,因此工具欄在 Tab 順序中僅佔用一個位置,並且可以使用箭頭鍵進行導航。一旦焦點位於工具欄上,應使用箭頭鍵將焦點移動到工具欄中的特定專案。由於此更改,工作臺的 Tab 停止位少得多,從而更容易在所有部分之間導航。

為了一致性,相同的更改也應用於選項卡區域。因此,整個選項卡區域只有一個 Tab 停止位,選項卡之間的鍵盤導航應使用左右箭頭鍵完成。

Windows 上的單詞導航

我們改進了 Windows 上的單詞導航方式,以與 Windows 上的螢幕閱讀器對基於 Electron 的應用程式的期望保持一致。現在,使用單詞導航時,每個單詞都會被螢幕閱讀器正確讀出。

由於此更改,我們正在棄用以下命令。它們仍然有效,但我們將來可能會刪除它們。

  • cursorWordAccessibilityLeft
  • cursorWordAccessibilityLeftSelect
  • cursorWordAccessibilityRight
  • cursorWordAccessibilityRightSelect

非 Windows 平臺已經按預期工作,因此我們沒有在那裡進行更改。

改進了檢視和按鈕的角色

根據使用者反饋,我們改進了工作臺中多個檢視和按鈕的角色。活動欄側邊欄面板現在具有role:none,這將使螢幕閱讀器不那麼冗長。活動欄中的管理帳戶按鈕現在正確宣佈它們具有彈出視窗。

整合終端

在視窗重新載入時保留終端程序

本地終端程序現在在視窗重新載入時恢復,例如當擴充套件安裝需要重新載入時。終端將重新連線,並且終端的 UI 狀態將恢復,包括活動選項卡和拆分終端的相對尺寸。

In a local window, two split terminals are created and resized. On reload, the layout appears unchanged.

此功能可以透過將terminal.integrated.enablePersistentSessions設定為 false 來停用。

Windows 效能改進

由於新的終端程序佈局,來自終端程序的頻繁 pty 資料事件現在應該處理得更快。由於 Windows 上 conpty 提供的事件較小,預計這將比其他平臺對 Windows 的影響更大。

自動重新啟動需要環境更改的終端

最近推出了一項新功能,使擴充套件能夠影響終端的環境。各種語言擴充套件和內建的 git 擴充套件都使用此功能,以使 VS Code 作為 git 身份驗證提供者,從而無需登入。以前,此功能的 UX 是在右上角顯示一個細微的⚠️圖示,表示終端的環境已過期。該指示器是細微的,因為環境更改可能重要也可能不重要。

我們對此進行了調整,以在終端尚未互動時自動重新啟動環境已過期的終端。這可能會導致一些閃爍,但擴充套件終端整合現在更加無縫。例如,WSL 視窗中的第一個終端不再顯示 Git 身份驗證錯誤,前提是重新啟動發生在終端中鍵入之前。

工作臺

Emmet

用縮寫包圍用縮寫包圍單個行命令已合併為一個用縮寫包圍命令,以減少對使用哪個包圍命令的任何混淆。此外,用縮寫包圍命令現在正確顯示預覽空白。

emmet.extensionsPath設定現在也可以接受路徑陣列,而不僅僅是字串。因此,當與設定同步結合使用時,可以根據機器指向不同的程式碼片段檔案,而無需為每臺機器更新設定。

產品圖示主題

首批產品圖示主題已在擴充套件市場中提供。感謝主題作者的辛勤工作!

要選擇或查詢主題,請從命令提示符或設定齒輪中使用首選項:產品圖示主題命令。

Product icon themes in the Extension Marketplace

上下文鍵的 IntelliSense

VS Code 使用when子句來啟用和停用鍵繫結。擴充套件還使用 when 子句來控制選單檢視貢獻。現在編寫這些 when 子句要簡單得多,因為編輯器為它們提供了完成。

keybindings.json 中上下文鍵的 IntelliSense 主題:GitHub Light Theme,字型:FiraCode

開啟編輯器新建無標題檔案操作

現在開啟編輯器檢視標題區域中有一個新建無標題檔案操作。

New untitled file in Open Editors view

更新了應用程式選單設定

用於應用程式選單可見性的window.menuBarVisibility設定已更新,以更好地反映選項。主要進行了兩項更改。

首先,設定的default選項已重新命名為classic

其次,應用程式選單欄中的顯示選單欄條目現在在classiccompact選項之間切換。要完全隱藏它,您可以在compact模式下更新設定,或使用活動欄的上下文選單。

應用程式選單中的顯示選單欄條目 主題:GitHub Light Theme

Webview 快取改進

我們改進了 Webview 中本地檔案的快取。如果 Webview 從磁碟重新載入檔案,那麼我們現在使用ETags以避免檔案未更改時再次讀取。這可以消除資料傳輸,並提高響應時間,尤其是在遠端工作區中。

此快取目前僅適用於現有 Webview 重新載入資源。它不適用於新建立的 Webview,即使該 Webview 屬於以前建立過類似 Webview 的擴充套件。

工作區搜尋操作的更改

我們修改了現有的workbench.view.search,使其不再將選定的文字放入搜尋輸入,而是開啟輸入。要使用選定的文字並遵循search.mode設定建立新搜尋,應使用workbench.action.findInFiles

僅限修飾符的鍵繫結

現在可以為重複的修飾符定義鍵繫結,例如shift shiftalt altctrl ctrlcmd cmd / meta meta / win win。這些鍵繫結可以手動輸入到keybindings.json中,例如

{ "key": "shift shift", "command": "workbench.action.quickOpen" }

更新的列表/樹形 UI

我們更新了列表/樹形樣式以匹配本機焦點和選擇指示器:聚焦元素現在將以輪廓顏色渲染。

List/tree UI showing focused element

重大變更

建議主題釋出者透過將list.focusBackground顏色的自定義與quickInput.list.focusBackground顏色互換來採用此樣式。要檢視示例,請檢視此提交

表格小部件

我們引入了一個新的表格小部件,它建立在現有列表小部件之上,因此我們可以以渲染列表元素相同的效能渲染表格資料。目前,它用於我們遠端功能的埠檢視中。

Table widget view of remote Ports

開始使用

我們正在試驗在啟動時顯示的新編輯器,稱為“入門”編輯器。這旨在使 VS Code 的某些功能對新使用者更易於使用。一些 Insiders 使用者可能已經看到了它,並且在此迭代過程中它將逐漸推廣到更多的穩定版使用者。您可以透過將workbench.startupEditor設定修改為gettingStarted或從gettingStarted中刪除來隨時選擇啟用或停用新行為。

Getting Started experience walkthrough

時間線檢視

您現在可以使用選擇進行比較與選定項比較命令來比較 Git 歷史時間線條目中的更改,類似於在資源管理器檢視中比較檔案。此功能可讓您快速檢視 Git 檔案歷史中任意兩個提交之間的所有更改。

Select for Compare command in context menu

預設 sash 懸停邊框顏色

1.52 版本中,我們引入了 sash 的懸停邊框顏色標記 (sash.hoverBorder),但未設定預設值。我們現在預設在所有主題上顯示此顏色。

Sash hover border color

除錯

斷點檢視改進

用於刪除斷點的新內聯操作

我們在斷點檢視中添加了一個內聯操作X來刪除斷點。此操作應使刪除斷點更容易。

Breakpoints view showing X next to selected breakpoint

異常過濾器幫助文字支援

最近我們添加了在斷點檢視中編輯異常過濾器條件的選項。

為了使這些條件更易於發現且其語法不言自明,VS Code 現在在異常過濾器上顯示懸停文字,並在條件文字框中顯示佔位符文字。

由於這兩個資訊都由底層除錯擴充套件提供,因此它可能比一些通用訊息更具體(因此更有幫助)。

由於此新功能基於除錯介面卡協議的補充(見下文),因此它需要除錯擴充套件的選擇加入。在此版本中,只有 VS Code 的內建 JavaScript 偵錯程式支援新功能。

Breakpoint placeholder

新設定和其他改進

在除錯控制檯中摺疊相同的行

有一個新設定debug.console.collapseIdenticalLines,它控制除錯控制檯是否應摺疊相同的行並用徽章顯示多次出現。預設值為摺疊。

控制在除錯前儲存哪些編輯器

有一個新設定debug.saveBeforeStart,它控制在除錯開始前儲存哪些編輯器。此設定具有以下值:

  • allEditorsInActiveGroup:儲存活動組中的所有編輯器。預設值。
  • nonUntitledEditorsInActiveGroup:儲存活動組中的所有編輯器,除了無標題編輯器。
  • none:不儲存任何編輯器。

此設定對於 PowerShell 除錯很有用,因為 PowerShell 偵錯程式支援除錯未儲存的檔案。

改進了重啟幀操作的啟用

透過除錯介面卡協議的新增功能,除錯擴充套件現在能夠向 VS Code UI 傳達“重啟幀”操作是否在選定的堆疊幀上可用。VS Code 現在停用呼叫堆疊檢視中無法重啟的堆疊幀的重啟幀內聯操作。

例如,JS-Debug 擴充套件已經採用了此功能,現在非同步堆疊跟蹤會停用重啟幀操作。

語言

TypeScript 4.2

VS Code 現在隨附 TypeScript 4.2.2。此主要更新包括許多 TypeScript 語言改進,以及 JavaScript 和 TypeScript 工具的許多改進和錯誤修復。

您可以在TypeScript 部落格上閱讀有關 TypeScript 4.2 的更多資訊。

快速修復以宣告缺失函式

新的新增缺失函式宣告快速修復會填充缺失的函式。例如,如果我們呼叫缺失的函式add

const x: number = add(1, 2);

add上使用新增缺失函式宣告會得到

const x: number = add(1, 2);
function add(arg0: number, arg1: number): number {
  throw new Error('Function not implemented.');
}

您可以在編寫程式碼時使用此快速修復,根據呼叫簽名快速填充函式。

要在 JavaScript 中使用此快速修復,您必須啟用型別檢查

JS Doc 模板現在生成 @returns

如果被註釋的函式包含return語句,JS Doc 模板現在會自動包含@returns。例如,對於函式getViz

function getViz(el) {
  return el?.viz;
}

生成的 JSDoc 模板是

/**
 *
 * @param {*} el
 * @returns
 */
function getViz(el) {
  return el?.viz;
}

您可以使用javascript.suggest.jsdoc.generateReturnstypescript.suggest.jsdoc.generateReturns停用 JSDoc 註釋中的@returns

已棄用的 DOM API 現在已標記

已棄用的 DOM 方法現在在建議和程式碼中標記為已棄用

document.clear being marked as deprecated in code

您可以透過設定editor.showDeprecated: false來停用在編輯器中顯示已棄用屬性和函式。

Notebook

自動重新載入筆記本

筆記本檔案在磁碟上更改且沒有未儲存更改時會自動重新載入。這應該會使使用版本控制下的筆記本變得更加簡單。

改進了大型單元格的焦點

當大型筆記本單元格獲得焦點時,當單元格的頂部和底部超出檢視範圍時,您現在可以更好地判斷哪個單元格獲得焦點。我們現在在獲得焦點的單元格的左側和右側顯示邊框。

Notebook focus for a large cell

CSS/LESS/SCSS 和 HTML 中的懸停

您現在可以微調 HTML 和 CSS 中懸停的內容,以:

  • 不顯示 MDN 的文件
  • 不顯示 MDN 頁面的連結

使用設定css.hover.documentationcss.hover.references更改 CSS 的懸停。將css替換為htmlcssscssless以更改這些語言的設定。

預覽功能

可擴充套件的筆記本 Markdown 渲染器

在此迭代中,我們探索了使筆記本單元格的 Markdown 渲染器可擴充套件。例如,在下面的螢幕截圖中,我們擴充套件了 VS Code 的 Markdown 渲染器以支援在筆記本單元格中顯示數學公式

A math formula being rendered in a notebook cell

為了使我們的 Markdown 渲染器可擴充套件,我們探索了使用Markdown It來渲染所有筆記本 Markdown。我們還探索了將渲染的 Markdown 移動到筆記本的背景 Webview 中。

雖然我們尚未準備好為此開放官方 API,但我們計劃在 3 月繼續進行此探索。您還可以使用未文件化的notebook.experimental.useMarkdownRenderer: true設定今天嘗試新的可擴充套件 Markdown 渲染器。

對擴充套件的貢獻

Brackets

來自 Brackets 原始碼編輯器的開發人員可以使用Brackets Keymap擴充套件在 VS Code 中繼續使用相同的鍵盤快捷鍵。還有一個Brackets 擴充套件包,其中捆綁了用於處理 CSS 和建立即時預覽的擴充套件。

Brackets Extension Pack in the Marketplace

GitHub 拉取請求和議題

GitHub Pull Requests and Issues擴充套件仍在繼續開發中,該擴充套件允許您處理、建立和管理拉取請求和問題。

要了解所有新功能和更新,您可以檢視擴充套件 0.24.0 版本的完整更新日誌

遠端開發

遠端開發擴充套件的工作仍在繼續,它允許您使用容器、遠端機器或 適用於 Linux 的 Windows 子系統 (WSL) 作為功能齊全的開發環境。

1.54 版的功能亮點包括:

  • 埠視圖表佈局
  • 遠端 - SSH:X11 轉發
  • WSL:改進了 WSL 2 支援

您可以在遠端開發釋出說明中瞭解新的擴充套件功能和錯誤修復。

擴充套件創作

編輯器標題選單和“執行”子選單的限制

編輯器工具欄(editor/title)中的空間有限。因此,我們:

  • 實現了溢位行為。當主組(即帶有圖示呈現的操作組)超過九個命令時,所有額外命令都會溢位到...選單中。
  • 添加了editor/title/run子選單。我們要求擴充套件作者將執行和除錯命令貢獻到此選單中,而不是像我們在之前的版本中建議的那樣貢獻到editor/title選單中。此外,不再需要使用魔法組值1_run@101_run@20才能使命令顯示在正確的位置。

Run dropdown menu

另請注意,執行子選單是動態的,當它成為唯一的子選單時,它會用其第一個子選單替換自身。

身份驗證提供程式 API

您現在可以註冊一個身份驗證提供程式,其他擴充套件可以使用它來對服務執行身份驗證。

擴充套件市場的新反饋渠道

有一個新的公共倉庫用於與擴充套件市場相關的問題。如果您遇到技術問題、想提供反饋或有功能請求,請提出問題

更新的 codicons

我們已將以下新圖示新增到我們的 codicon 庫中:

  • 除錯重新執行
  • 收集
  • git-拉取請求-建立
  • 筆記本模板
  • 在上面執行
  • 在下面執行
  • 型別層次結構
  • 型別層次結構-子
  • 型別層次結構-父
  • 變數組

Codicons for tasks

我們還更新了以下圖示以保持一致

  • debug-alt-small
  • debug-alt
  • 除錯重新執行
  • play-circle
  • 播放
  • 在上面執行
  • run-all
  • 在下面執行

Consistent codicons

建議的擴充套件 API

每個里程碑都會帶來新的提議 API,擴充套件作者可以嘗試使用它們。一如既往,我們希望得到您的反饋。要嘗試提議的 API,您需要執行以下操作:

  • 您必須使用 Insiders 版本,因為提議的 API 經常更改。
  • 您的擴充套件的 package.json 檔案中必須包含以下行:"enableProposedApi": true
  • 將最新版本的 vscode.proposed.d.ts 檔案複製到您專案的源位置。

您不能釋出使用提議 API 的擴充套件。下個版本中可能會有破壞性更改,我們絕不希望破壞現有擴充套件。

圖示貢獻點

圖示貢獻點允許擴充套件透過 ID 定義新圖示,以及預設圖示。然後,該圖示 ID 可以由擴充套件(或依賴於該擴充套件的任何其他擴充套件)在可以使用 ThemeIcon 的地方使用:在Markdown 字串中(例如,"$(distro-ubuntu)" Ubuntu 20.04")以及所有接受ThemeIcon的地方(例如,new ThemeIcon("distro-ubuntu"))。

產品圖示主題可以重新定義圖示(如果它們知道圖示 ID)。

有關更多資訊,請參閱問題 114942 以獲取詳細資訊並提供反饋。

內聯值提供程式 API

如今,VS Code 偵錯程式的顯示內聯值功能基於 VS Code 核心中的通用實現,並且不透過設定或擴充套件性提供自定義功能。因此,它並非完全適用於所有語言,有時會顯示不正確的值,因為它不理解底層源語言。因此,我們正在開發一個擴充套件 API,允許完全替換內建實現或用自定義程式碼替換部分實現。

在此里程碑中,我們提供了提案 API 的第一個實現。

以下是內聯值提供程式 API 的簡要說明:

  • 必須為語言註冊InlineValuesProvider
  • 對於給定文件,InlineValuesProvider必須定位所有應顯示內聯值的語言元素。
  • 對於每個元素,必須返回一個InlineValue描述符物件,該物件指示 VS Code 顯示哪些資訊。目前支援三種類型的InlineValue物件:
    • InlineValueText:要顯示的完整文字,
    • InlineValueVariableLookup:變數的名稱,VS Code 將嘗試在“變數”檢視中查詢其值。名稱和值然後以“name = value”的形式顯示,
    • InlineValueEvaluatableExpression:VS Code 將傳送給偵錯程式進行評估的表示式。表示式和結果然後以“expression = result”的形式顯示。

以下片段(來自Mock Debug)顯示了一個用於“markdown”檔案的最小內聯值提供程式,它使用正則表示式定位“變數”,然後指示 VS Code 透過變數檢視查詢其值:

vscode.languages.registerInlineValuesProvider('markdown', {
  provideInlineValues(
    document: TextDocument,
    viewport: Range,
    context: InlineValueContext
  ): ProviderResult<InlineValue[]> {
    const allValues: InlineValue[] = [];
    for (let l = 0; l <= context.stoppedLocation.end.line; l++) {
      const line = document.lineAt(l);
      var regExp = /local_[ifso]/gi; // match variables of the form local_i, local_f, Local_i, LOCAL_S...
      do {
        var match = regExp.exec(line.text);
        if (match) {
          const varName = match[0];
          const varRange = new Range(l, match.index, l, match.index + varName.length);
          allValues.push(new InlineValueVariableLookup(varRange, varName));
        }
      } while (match);
    }
    return allValues;
  }
});

現在,內聯值提供程式正在執行:

Debugger shows inline values

如果您想為此提案 API 提供反饋,請向此問題新增評論。

測試

我們繼續在VS Code 中的測試方面取得進展。本月我們專注於完善 VS Code 中的基本體驗和擴充套件 API。我們還發布了一些關於測試的臨時文件,這些文件將隨著 API 的持續穩定而完善。

語言伺服器協議

針對即將釋出的 3.17 版本,已經實現了一個診斷拉取模型的初步提案。該提案可在VS Code LSP 庫的後續版本中獲取。

除錯介面卡協議

ExceptionBreakpointsFilter 的更多幫助文字屬性

已向ExceptionBreakpointsFilter添加了兩個可選的 UI 屬性descriptionconditionDescription

使用這些屬性,客戶端可以顯示有關異常斷點的附加資訊。description屬性可以顯示在懸停文字中,conditionDescription可以用作條件可編輯文字框的佔位符文字。

改進了 setExceptionBreakpoints 請求的描述

我們改進了setExceptionBreakpoints請求的描述,增加了關於如果使用者輸入無效異常斷點條件時介面卡應該做什麼的指導。

堆疊幀的新 canRestart 屬性

已向堆疊幀添加了一個新的可選布林屬性canRestart。它指示堆疊幀是否可以使用restart請求重新啟動。根據此資訊,客戶端可以啟用或停用重啟幀上下文選單操作。

工程

Electron 沙盒進展

在這個里程碑中,我們繼續讓 VS Code 視窗為啟用 Electron 的沙盒上下文隔離功能做好準備。

具體來說:

  • 我們能夠將渲染器中的一些原生模組要求移動到其他程序。
  • MessagePort通訊通道已實現在沙盒啟用時工作。

新終端程序佈局

終端程序現在在新的“pty 主機”程序下生成,而不是視窗程序。此更改不僅是 Electron 沙盒的一部分,而且還應該提高終端的穩定性和效能。

Windows 安裝程式釋出到 Windows 包管理器

x86x64的 Windows 使用者和系統安裝程式現在正在釋出到Windows 包管理器。您可以使用winget工具搜尋所有 Visual Studio Code 安裝程式 - winget search vscode,並安裝任何已釋出的安裝程式。

使用 TypeScript 4.3 構建 VS Code

VS Code 現在使用 TypeScript 4.3 的夜間構建進行構建。這使我們能夠驗證 TypeScript 團隊的最新工作並對新更改提供反饋。

最新的 TypeScript 版本已經幫助我們捕獲了一些我們在條件中缺少 awaits 的情況。

防止 yarn.lock 更改

我們現在有 CI 可以防止對yarn.lock檔案的 PR,以提高供應鏈安全性。

預設分支:main

我們已經開始將所有倉庫的預設分支重新命名為main,包括microsoft/vscode。我們已經完成了這項工作的約 60%。

文件

VS Code 和 Python 在課堂上

閱讀哈維穆德學院一位計算機科學教授的案例研究,他使用 VS Code 在他的 Python 入門 CS 課程中。瞭解他為學生推薦的設定,以及有用的擴充套件和免費的自學 Python 和資料科學課程。

擴充套件故障排除部落格文章

每個人都喜歡安裝和使用 VS Code 擴充套件。但是,當您安裝了許多擴充套件時,有時編輯器可能會開始出現“奇怪”的行為,如果這種行為是由特定擴充套件引起的,那將是非常棒的。如果您錯過了擴充套件二分法實用程式的早期公告,您可以閱讀這篇“使用二分法解決擴充套件問題”部落格文章,其中描述瞭如何快速排除“壞”擴充套件的故障,甚至幫助擴充套件作者提供反饋。

值得注意的修復

  • 100151:選單鍵應用於資源管理器中錯誤的專案
  • 112055:除錯為每個 Python 會話開啟一個新的整合終端
  • 114881:複製資料夾或檔案時保留符號連結
  • 114933:“任務無法跟蹤”的困擾
  • 115922:檔案資源管理器中篩選時游標鍵不起作用
  • 116037:除錯控制檯中輸出不顯示連結懸停
  • 116101:在命令搜尋中找不到目標命令,因為英文描述已消失
  • 116932:從貢獻的命令執行中丟擲自定義異常會顯示神秘的錯誤彈出視窗

感謝

最後但同樣重要的是,衷心感謝以下本月為 VS Code 做出貢獻的人們:

對我們問題跟蹤的貢獻

vscode 的貢獻

language-server-protocol 的貢獻

vscode-languageserver-node 的貢獻

vscode-emmet-helper 的貢獻

vscode-html-languageservice 的貢獻

vscode-js-debug 的貢獻

vscode-textmate 的貢獻

vscode-vsce 的貢獻