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

2019 年 11 月 (版本 1.41)

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

下載:Windows:x64 | Mac:Intel | Linux:deb rpm tarball snap


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

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

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

工作臺

資源管理器中的緊湊資料夾

在檔案資源管理器中,我們現在以緊湊形式渲染單個子資料夾。在這種形式下,單個子資料夾將壓縮在一個組合的樹元素中。例如,這對於 Java 包結構非常有用。

設定 explorer.compactFolders 控制此行為。預設情況下,此設定處於開啟狀態。

File Explorer compact folders

編輯差異檢視的左側

如果您比較的兩個編輯器都可編輯(例如,透過從檔案資源管理器比較兩個檔案或執行全域性搜尋和替換),則左側現在也變得可編輯並可以儲存(⌘S (Windows, Linux Ctrl+S))。

Diff view left hand side edit

注意:如果您厭倦了按下 ⌘S (Windows, Linux Ctrl+S),可以啟用自動儲存(檔案 > 自動儲存)。

從速覽編輯器儲存

如果您調出速覽檢視並輸入內容,如果焦點在該嵌入式編輯器中,您現在可以透過 ⌘S (Windows, Linux Ctrl+S) 儲存更改。

Saving in a Peek view

問題面板

更多篩選器

“問題”面板中添加了更多預定義篩選器。您現在可以按型別(錯誤、警告和資訊)篩選問題,還可以檢視當前活動檔案範圍內的問題。

Problems panel filters

主題:GitHub Sharp Dark,字型:FiraCode

在狀態列顯示當前問題

您現在可以配置 VS Code 以在狀態列中顯示當前問題訊息。這使您可以在不使用任何額外部索引鍵盤或滑鼠手勢的情況下,檢視活動檔案中選定問題的摘要。

注意:啟用此功能需要啟用設定 problems.showCurrentInStatus

Current problem displayed in the Status bar

主題:GitHub Sharp Dark,字型:FiraCode

靈活的篩選框佈局

“問題”面板中的篩選框現在會根據面板的位置和大小調整其位置。

Problems panel filter box adjustable layout

主題:GitHub Sharp Dark,字型:FiraCode

改進的字型渲染 (Windows, Linux)

在上一個里程碑更新到 Electron 6 時,許多使用者報告說他們的字型渲染退化了。具體來說,字型不再像以前那樣平滑。我們立即在編輯器中解決了這個問題,並在 1.40 恢復版本中提供了修復。然而,工作臺的其他區域仍然存在字型渲染不理想的問題。

在此版本中,我們改進了工作臺更多部分的字型渲染(適用於 Windows 和 Linux)。下面的螢幕截圖顯示了前後對比(放大以顯示差異)。特別是,工作臺的許多樹和列表元素以前使用灰度抗鋸齒渲染,現在它們使用子畫素抗鋸齒渲染。

之前(左)和之後(右)

Improved font rendering before and after

我們計劃在工作臺的更多部分改進字型渲染。您可以檢視此文字渲染問題查詢以檢視進度。

遠端場景下更快的讀/寫檔案效能

對於檔案系統遠端且延遲高的場景(例如在使用瀏覽器連線慢速網路使用 VS Code 或連線到不在同一區域的遠端主機時),讀寫檔案(從文字編輯器)現在應該更快。我們切換到了基於流的讀寫實現,大大減少了通訊開銷。

鍵入時更新搜尋結果

在全文搜尋中,結果將隨著您的鍵入而更新。這對於構建複雜的正則表示式查詢等場景特別有用,在這種情況下,對查詢的快速反饋可以幫助您編寫正則表示式。

在這裡,即時反饋有助於構建正則表示式查詢和替換查詢,以採用 TypeScript 的可選鏈語法

Search result updates on type

主題:Noctis Hibernus,字型:Hasklig

注意:可以透過將 search.searchOnType 設定為 false 來停用此功能,並且可以透過 search.searchOnTypeDebouncePeriod 調整鍵入和搜尋之間的延遲,預設為 300 毫秒。

為搜尋結果新增游標

我們添加了一個命令,可為文字搜尋的所有匹配項新增游標。在“搜尋”檢視中將焦點放在檔案的搜尋結果上時,您可以按 ⇧⌘L (Windows, Linux Ctrl+Shift+L),同時編輯該檔案中所有匹配項。這與使用“查詢”小部件在單個編輯器中搜索時使用的鍵盤快捷方式相同。

Add cursors to search results

預設展開所有搜尋結果

以前,如果全文搜尋在單個檔案中返回超過 10 個結果,它會在結果樹中顯示為摺疊。但是,這有時會使查詢特定結果變得困難,因此在此版本中,所有結果都將顯示為展開。

您可以將 search.collapseResults 設定為 auto 以恢復舊行為。

編輯器

迷你地圖上顯示錯誤、警告和內容更改的裝飾

錯誤和警告現在在迷你地圖(程式碼概覽)中內聯突出顯示。您可以使用新的 minimap.errorHighlightminimap.warningHighlight 主題顏色更改這些裝飾的顏色。

下面您可以看到迷你地圖突出顯示了一個細微的逗號拼寫錯誤

Minimap error and warning decorations

內容更改裝飾也顯示在迷你地圖的邊槽中

Minimap content change decorations

您可以使用以下內容修改內容更改顏色

  • minimapGutter.addedBackground
  • minimapGutter.modifiedBackground
  • minimapGutter.deletedBackground

您可以使用 scm.diffDecorations 設定更改原始碼控制裝飾的可見性,其值包括

  • all - 在所有位置顯示原始碼控制差異裝飾。
  • gutter - 僅在左側編輯器邊槽中顯示。
  • minimap - 僅在迷你地圖邊槽中顯示。
  • overview - 僅在概覽標尺中顯示。
  • none - 不顯示差異裝飾。

程式碼導航備用命令

以前,當已經位於定義處時,選擇“轉到定義”沒有任何作用。在此版本中,可以執行備用命令。例如,可以將“轉到定義”對映為執行“轉到引用”。

這透過 editor.gotoLocation.alternativeDefinitionCommand 設定進行自定義。例如,您可以將“轉到定義”的備用設定為“轉到宣告”,反之亦然。如果您更喜歡舊行為,可以保留該設定為空。

速覽、轉到和查詢所有命令

每個速覽命令現在都有一個轉到對應項。例如,現在既有速覽實現也有轉到實現。速覽檢視不會更改當前編輯器,並允許快速就地檢視原始碼。

下面的影片演示了使用速覽實現在速覽檢視中檢視 ICommandService 介面的所有實現

Peek Implementations command

主題:GitHub Sharp,字型:FiraCode

相比之下,轉到實現用於導航,可以快速將您帶到某個實現。

下面的影片(使用 "editor.gotoLocation.multipleImplementations": "goto" 設定)透過重複按 F12 導航到 ICommandService 介面的所有實現

Go to Implementations command with F12

主題:GitHub Sharp,字型:FiraCode

最後但同樣重要的是,與查詢所有引用命令類似,現在有了查詢所有實現。它將實現以穩定列表的形式呈現在編輯器的側面。這可以用作待辦事項列表,例如在執行影響介面所有實現的重構時。

Find All Implementations in the Side bar

主題:GitHub Sharp,字型:FiraCode

麵包屑和檔案大綱檢視的語言特定篩選

上一個里程碑,我們增加了從檔案大綱檢視和麵包屑導航中篩選特定型別(如變數)的功能。此版本完善了此功能,並允許語言特定篩選,例如不顯示 TypeScript 變數但顯示 JavaScript 變數。

下面您可以看到 value 常量是如何在 JavaScript 檔案的檔案大綱檢視中顯示,而在 TypeScript 版本中則不顯示。

Language-specific filter for Outline view

主題:GitHub Sharp,字型:Fira Code

macOS 上的 IntelliSense 鍵盤快捷鍵

IntelliSense 通常透過 Ctrl+Space 觸發。然而在 macOS 上,當配置了多個輸入源時,此鍵盤快捷鍵會被作業系統佔用。這常常導致混淆,使用者會認為 IntelliSense 壞了。

現在有兩種處理方式

  • 使用我們為 macOS 新增的新鍵盤快捷鍵 Alt+Escape
  • 透過偏好設定 > 鍵盤 > 快捷方式 > 輸入源,在 macOS 偏好設定中停用透過 Ctrl+Space 切換輸入源。

macOS Keyboard Shortcuts Input Sources option

螢幕閱讀器輸出

有一個新設定 editor.accessibilityPageSize,它控制螢幕閱讀器一次可以讀出的編輯器行數。請注意,對於大於預設值 10 的數字,這會影響效能。

如果您使用螢幕閱讀器“全部朗讀”命令,我們建議將 editor.accessibilityPageSize 設定為 100 或 1000。下一個里程碑,我們將考慮更改此設定的預設值。

新的括號匹配選項

現在可以將 "editor.matchBrackets": "near" 配置為舊行為,即僅當游標位於括號任一側時才突出顯示匹配的括號。預設值為 always,它會突出顯示包含當前游標位置的匹配括號。

新的自動縮排選項

設定 editor.autoIndent 現在可以採用不同的值。此設定會影響多個功能,例如按下 Enter、按下 Tab 或縮排和取消縮排行。您可以將此設定視為一個“滑塊”,它變得越來越有主見

  • "none":按下 Enter 將插入 \n,僅此而已。
  • "keep":按下 Enter 將保持當前行的縮排。
  • "brackets":以上所有,以及圍繞語言特定括號的特殊邏輯。
  • "advanced":以上所有,並遵循透過 onEnterRules 定義的語言特定規則。
  • "full" (預設):以上所有,並遵循透過 indentationRules 定義的語言特定規則。

程式碼操作選單鍵盤快捷鍵

程式碼操作和重構選單現在會顯示自定義鍵盤快捷鍵(如果存在)。

A keybinding for extract constant

整合終端

最小對比度

在終端中處理顏色的應用程式可能很棘手,它們可以使用以下顏色來顯示文字

  • 預設前景色
  • 終端主題定義的 16 種顏色調色盤
  • 一組 240 種固定顏色
  • 任何 RGB 顏色(1600 萬)

問題在於應用程式不知道預設的背景色或前景色是什麼,以及它是否與應用程式使用的顏色有良好的對比度。為了解決這個問題,終端現在可以動態更改文字的前景色,以滿足指定的對比度。

將前景色設定為所需的對比度,範圍為 1 到 21

// 4.5 is recommended for baseline website accessibility
"terminal.integrated.minimumContrastRatio": 4.5

終端顏色將增加或減少亮度,直到達到對比度,或前景色變為 #000000#ffffff

Terminal minimum contrast ratio setting

主題:Sapphire,字型:Hack

新的實驗性 WebGL 渲染器

終端現在有一個新的基於 WebGL 的渲染器,與舊的基於 Canvas 的方法相比,效能提升高達 900%*。

您可以使用此設定選擇使用新的渲染器

"terminal.integrated.rendererType": "experimentalWebgl"

速度改進歸因於許多方面,但以下是亮點

  • WebGL 允許我們更直接地與 GPU 通訊,而不是透過 Web 平臺的 CanvasRenderingContext2D API。
  • 渲染器幾乎完全處理數字和型別陣列,它們速度極快。物件和陣列建立也保持在最低限度,以避免不必要的垃圾回收。
  • 現在所有字元都快取到紋理圖集中,而不是僅快取帶有有限樣式集的 ASCII 字元。這意味著重複繪製相同的字元要快得多。

我們觀察到,使用 Canvas 渲染器時,幀渲染速度根據使用者的硬體/環境而差異很大。每幀通常需要 1 毫秒到 40 毫秒,但在極端情況下,當硬體問題是一個因素時,可能會達到 200 毫秒以上。到目前為止,WebGL 似乎更加一致,通常在 0.2 毫秒到 2 毫秒範圍內

WebGL frames are much faster

一旦整合,可靠性是我們期望改進的方面之一。使用 canvas 渲染器時,如果 GPU/canvas 出現問題,瀏覽器會嘗試變得智慧並回退到在 CPU 上渲染,但我們絕不希望發生這種情況,因為我們有基於 DOM 的渲染器,它更適合這種情況。使用 WebGL,它應該按預期工作或徹底失敗(無法獲取 WebGL 上下文),在這種情況下,我們可以回退到 DOM 渲染器。

由於渲染時間大大減少,CPU 被釋放出來專注於解析傳入資料,從而渲染更多幀並更快地執行命令。以下效能資料是透過在 vscode 儲存庫中執行 ls -lR 生成的

Commands run faster on the WebGL renderer

新的渲染器還修復了 canvas 渲染器的一個惱人錯誤,即當字元大於單元格大小時,其側面會被剪裁。這個問題在 Linux 上使用某些字型和下劃線時最常見。

* 有關基準測試的更多資訊,請訪問 xtermjs/xterm.js#1790

原始碼管理

Git:git.ignoredRepositories 中的相對路徑

git.ignoredRepositories 設定現在支援相對路徑,這在配置工作區設定並希望忽略 VS Code 中的某些儲存庫時很有用。

Git:FileSystemProvider 的採用

Git 擴充套件現在使用 FileSystemProvider API,除了修復某些編碼問題外,它還提供了一種更高效、更可靠的方式來公開 Git 儲存庫中檔案的舊版本。

語言

HTML 映象游標

當您編輯 HTML 標籤時,VS Code 現在會新增一個“映象游標”。此行為由設定 html.mirrorCursorOnMatchingTag 控制,該設定預設啟用。

此功能透過在游標移動到 HTML 標籤名稱範圍時,向匹配的標籤新增一個多游標來實現。就像在多游標模式下一樣,您可以使用逐詞刪除或逐詞選擇。當您將游標移出標籤名稱範圍時,映象游標將被移除。

一個特殊情況是當游標位於開始標籤的末尾時輸入 Space,例如在 div 的末尾,像 <div|></div|>。在這種情況下,VS Code 會移除結束標籤名稱之後插入的空格並退出映象游標模式,這樣您就可以繼續編輯 HTML 屬性。

HTML mirror cursor

主題:Nord,字型:Input Mono

HTML 重新命名標籤

您現在可以使用 F2 重新命名 HTML 中的開/閉標籤對。

HTML rename tag

CSS 屬性自動完成排名

CSS 自動完成現在按屬性的受歡迎程度進行排名

CSS suggestions ranked by popularity

使用資料來源於 ChromeStatus.org

Sass 模組支援

Sass 最近引入了新的模組系統

我們已在 SCSS 檔案中為 Sass 模組添加了語法高亮支援和語言功能支援。語言功能包括

  • @use@forward 的自動完成。
  • @use@forward 路徑的路徑完成。
  • Sass 內建模組(如 sass:mathsass:color)的自動完成。
  • @use@forward 匯入路徑的文件連結。

Sass module support

JSON

為避免大型 JSON 檔案出現效能問題,JSON 語言支援現在對其計算的摺疊區域和文件符號(用於“大綱”檢視和麵包屑)的數量設定了上限。預設情況下,限制為 5000 項,但您可以使用設定 json.maxItemsComputed 更改此限制。

JSON large file warning

TypeScript 3.7

VS Code 現在附帶 TypeScript 3.7.3。此重大更新帶來了一些 TypeScript 語言改進,包括可選鏈空值合併斷言函式,以及 JavaScript 和 TypeScript 的一些新工具功能。一如既往,此版本還包括許多重要的錯誤修復。

您可以在TS 3.7 部落格文章中閱讀有關 TypeScript 3.7 功能的更多資訊。

JavaScript 和 TypeScript 的可選鏈支援

由於 TypeScript 3.7,VS Code 現在為 JavaScript 和 TypeScript 開箱即用地支援可選鏈。這包括語法高亮和 IntelliSense

Optional chaining and nullish coalescing

此外,當您接受可選屬性的完成時,VS Code 可以自動插入 ?.

Selecting a completion on a potentially undefined value automatically inserts an optional chain

?. 的自動插入取決於啟用嚴格空檢查。可以透過 "typescript.suggest.includeAutomaticOptionalChainCompletions""javascript.suggest.includeAutomaticOptionalChainCompletions" 設定停用自動 ?. 插入。

TypeScript 的提取介面重構

新的提取到介面重構允許您快速將內聯型別提取到介面中,以便可以重用。

Selecting the new 'extract interface' refactoring

下面您可以看到“Neural”介面已從“keyes”中提取出來

After extracting the 'Neural' interface out of 'keyes'

JavaScript 和 TypeScript 的分號格式化程式選項

新的 javascript.format.semicolonstypescript.format.semicolons 格式化設定允許您控制格式化程式如何在 JavaScript 和 TypeScript 檔案中處理分號。

有效的分號格式設定值有

  • ignore - 不新增或移除分號(預設)。
  • insert - 在語句末尾插入分號。
  • remove - 移除不必要的分號。

未呼叫函式檢查

如果您在條件語句中忘記呼叫函式,VS Code 現在會提醒您。

考慮以下 TypeScript 片段

import * as fs from 'fs';

fs.stat('/path/to/file', function(err, stats) {
  if (stats.isDirectory) {
    handleDirectory(stats);
  }
});

上面的示例使用 Node.js fs.stat API 來獲取檔案的資訊。但是有一個 bug!.isDirectory 實際上是一個函式,而不是一個屬性!這意味著 handleDirectory 將在每個檔案上呼叫,而不僅僅是按預期在目錄上呼叫,因為函式 isDirectory 被定義並評估為 true

VS Code can alert when you forget to call a function

請注意,您只有在啟用嚴格空檢查時才會看到此診斷。

除錯

除錯 START 檢視

我們引入了一個新的除錯 START 檢視,以方便使用者在新的工作區中啟動和配置除錯。根據活動檔案,我們將選擇適當的除錯擴充套件,並使除錯或執行應用程式成為可能。對於更復雜的除錯和執行配置,最好還是配置 launch.json 檔案。

下面您可以看到快速開始除錯 Express JavaScript 應用程式,然後在需要更多控制時建立 launch.json 檔案。

Debug Start view

在“呼叫堆疊”檢視中將“重新啟動幀”作為內聯操作

為了提高“重新啟動幀”操作的可見性,現在在“呼叫堆疊”檢視中有一個在懸停時可見的內聯操作。在命中斷點後,重新啟動幀是重新執行前面的原始碼的一種便捷方法。如果除錯擴充套件不支援重新啟動幀,則不顯示此操作。

Restart frame button

除錯控制檯顯示輸入和輸出

為了更好地區分除錯控制檯中的輸入和輸出,我們在左側添加了輸入 > 和輸出 < 裝飾。

Debug console input and output decorations

內聯斷點顯示

新設定 debug.showInlineBreakpointCandidates 控制在除錯時是否在編輯器中顯示內聯斷點候選項裝飾。預設情況下,它們是可見的。

預覽功能

預覽功能尚未準備好釋出,但已足夠實用。我們歡迎您在這些功能開發期間提供早期反饋。

搜尋編輯器

在此里程碑中,我們已開始著手在專用編輯器中顯示搜尋結果。這提供了更多空間來檢視搜尋結果,並允許您同時維護多個搜尋結果集合。

在此版本中,您可以在搜尋編輯器中

  • 使用“轉到定義”系列命令導航到結果,包括“速覽定義”和“在側邊開啟定義”。
  • 重新執行搜尋以更新結果列表。
  • 檢視結果周圍的原始碼行。
  • 將結果持久化到磁碟以供以後引用,甚至在原始碼管理中跟蹤。

我們將在接下來的版本中繼續新增功能並提高可用性。

Search Editor

主題:A Touch of Lilac,字型:Hasklig

注意:您可以透過將 search.enableSearchEditorPreview 設定為 true 來預覽此功能。

呼叫層次結構檢視

呼叫層次結構 API 在穩定版中可用,語言擴充套件作者正在忙於實現它,因此我們添加了一個呼叫層次結構檢視。這補充了“速覽呼叫層次結構”檢視,並與“查詢所有引用”和“查詢所有實現”共享相同的側邊欄檢視。一旦語言擴充套件支援呼叫層次結構 API,您將能夠從上下文選單或命令面板中選擇“顯示呼叫層次結構”以檢視檢視

Call Hierarchy view

主題:GitHub Sharp,字型:FiraCode

呼叫層次結構檢視允許您深入檢視符號的呼叫者和呼叫。它會在活動編輯器中突出顯示呼叫,允許從任何子項重新設定檢視的父級,並且它會保留以前執行的歷史記錄。

JavaScript 偵錯程式

我們正在為 Node.js 和 Chrome 開發一個新的偵錯程式。您可以安裝每夜擴充套件 js-debug-nightly,並透過更新設定來新增以下內容,將其用作即插即用的替代品:

{
  "debug.chrome.useV3": true,
  "debug.node.useV3": true
}

您無需更改現有的啟動配置即可使用新的偵錯程式。

偵錯程式帶來了各種新功能,例如除錯和單步執行 Web Workers 的能力

An animation showing stepping through postMessage calls to and from a webworker

主題:Earthsong,字型:Fira Code

...無需額外配置或標誌即可除錯 npm 指令碼...

An animation dispatching the "run npm script" command, selecting "npm start", and then hitting a breakpoint in an executed script

...還有更多!如果您遇到問題,請提出問題

對擴充套件的貢獻

遠端開發

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

1.41 版的功能亮點包括

  • 開發容器:更容易在容器中嘗試示例儲存庫(例如 vscode-remote-try-python)。
  • 開發容器:建立容器時效能得到改進,併為 devcontainer.json 提供了新選項。
  • WSL:在基於 Windows 10 ARM 的 PC(如 Surface Pro X)上提供支援。
  • 遠端資源管理器現在可以將可用檢視限定為特定的遠端型別。

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

您還可以閱讀最近一篇關於使用 VS Code 檢查容器的部落格文章,並嘗試更新的在 VS Code 中使用 C++ 和 WSL 教程。

ESLint

ESLint 擴充套件的改進

  • 更好地支援 ESLint 6.x - 在大多數情況下,使用 ESLint 6.x 時無需配置工作目錄。
  • 改進的 TypeScript 檢測 - 一旦 TypeScript 在 ESLint 中正確配置,您就不再需要透過 VS Code 的 eslint.validate 設定進行額外配置。HTML 和 Vue.js 檔案也是如此。
  • Glob 工作目錄支援 - 具有複雜資料夾結構且需要透過 eslint.workingDirectories 自定義工作目錄的專案現在可以使用 glob 模式,而不是列出每個專案資料夾。例如,code-* 將匹配所有以 code- 開頭的專案資料夾。此外,該擴充套件現在預設更改工作目錄。您可以使用新的 !cwd 屬性停用此功能。
  • 改進的儲存時自動修復 - 儲存時自動修復現在是 VS Code 的儲存時程式碼操作基礎設施的一部分,並在一輪中計算所有可能的修復。它透過 editor.codeActionsOnSave 設定進行自定義。該設定支援 ESLint 特定的屬性 source.fixAll.eslint。該擴充套件還遵循通用屬性 source.fixAll

以下設定開啟了包括 ESLint 在內的所有提供程式的自動修復

    "editor.codeActionsOnSave": {
        "source.fixAll": true
    }

相比之下,此配置僅為 ESLint 開啟自動修復

    "editor.codeActionsOnSave": {
        "source.fixAll.eslint": true
    }

您也可以透過以下方式有選擇地停用 ESLint

    "editor.codeActionsOnSave": {
        "source.fixAll": true,
        "source.fixAll.eslint": false
    }

vscode-scss

vscode-scss 擴充套件為 SCSS 變數、混合和函式提供跨檔案語言支援。在此里程碑中,我們協助其開發了一個新版本,0.8.0

新版本改進了

  • 更好的匯入路徑解析
  • 自動完成顏色變數的顏色預覽
  • 更好的效能

擴充套件創作

Figma 設計工具包

我們建立了一個 Figma 設計工具包,以更好地幫助擴充套件作者設計其擴充套件體驗。檢視 GitHub 上的工具包倉庫,其中包含有關如何訪問和使用工具包的說明。

下面是一些包含的元件示例

Figma design toolkit components

所有元件都應可調整大小和可編輯。

Editing Figma components

如果您遇到任何問題或對某些元件有任何要求,請在工具包倉庫中建立一個問題,以便我們進行分類和跟蹤這些請求。

除錯圖示顏色標記

我們為除錯檢視添加了一組新的顏色標記。

除錯工具欄

  • debugIcon.startForeground
  • debugIcon.continueForeground
  • debugIcon.disconnectForeground
  • debugIcon.pauseForeground
  • debugIcon.restartForeground
  • debugIcon.stepBackForeground
  • debugIcon.stepIntoForeground
  • debugIcon.stepOutForeground
  • debugIcon.stepOverForeground
  • debugIcon.stopForeground

Debug toolbar colors

主題:Min Dark,字型:Input Mono

除錯斷點

  • debugIcon.breakpointForeground
  • debugIcon.breakpointDisabledForeground
  • debugIcon.breakpointUnverifiedForeground
  • debugIcon.breakpointStackframeForeground
  • debugIcon.breakpointCurrentStackframeForeground

Debug breakpoint colors

主題:Min Dark,字型:Input Mono

工作區檔案事件

當檔案和資料夾更改時,有新的事件

  • vscode.workspace.on[Will|Did]CreateFile
  • vscode.workspace.on[Will|Did]RenameFile
  • vscode.workspace.on[Will|Did]DeleteFile

這些事件在檔案從資源管理器或透過 vscode.workspace.applyEdit(WorkspaceEdit) API 從擴充套件建立、重新命名或刪除時觸發,但不在磁碟上檔案更改或透過 vscode.workspace.fs API 修改檔案時觸發。

這些事件的一個可能用例是語言伺服器,它可能會在重新命名檔案之前更新檔案內容,或者在刪除/建立檔案之後更新專案檔案。

SnippetString

SnippetString 型別現在有一個用於選擇元素的 builder 方法。

嚴格的 getWordRangeAtPosition

TextDocument.getWordRangeAtPosition API 現在更加嚴格,它會丟擲錯誤,而不是忽略導致空字串匹配的無效正則表示式。

extensionKind 的棄用字串型別

擴充套件作者可以使用 package.json 中的 extensionKind 屬性來指示擴充套件在遠端情況下應該在哪裡執行。在 1.40 版本中,此值可以是字串或陣列。從本版本開始,此屬性僅支援陣列值,使用字串已棄用。有關更多資訊,請參閱遠端開發文件

將 DAP Source 轉換為 URI

VS Code 擴充套件 API 在引用可以在編輯器中開啟的資源時使用文件 URI,而除錯介面卡協議基於Source 描述符。在此里程碑中,我們添加了一個連線這兩個世界的 API。函式 debug.asDebugSourceUri 從 DAP Source 物件建立 URI。這使得將 DAP Source 開啟到 VS Code 編輯器中變得簡單

export async function openDAPSource(
  session: vscode.DebugSession,
  source: DebugProtocol.Source
) {
  const uri = vscode.debug.asDebugSourceUri(source, session);
  vscode.window.showTextDocument(vscode.workspace.openTextDocument(uri));
}

建議的擴充套件 API

每個里程碑都會帶來新的提議 API,擴充套件作者可以進行嘗試。一如既往,我們渴望您的反饋。以下是試用提議 API 的方法:

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

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

CodeAction.disabled

VS Code 鼓勵擴充套件使用程式碼操作來實現重構功能。然而,使用者可能很難發現擴充套件支援哪些重構,以及理解為什麼某個重構對於特定選擇不可用。CodeAction.disabled API 提案旨在幫助擴充套件使其重構更易於發現。

提議的 CodeAction 上的 .disabled 屬性是一個人類可讀的字串,描述了為什麼某個程式碼操作不可能。以下是我們CodeAction 示例擴充套件.disabled 的使用示例。

import * as vscode from 'vscode';

export class Emojizer implements vscode.CodeActionProvider {

    public provideCodeActions(document: vscode.TextDocument, range: vscode.Range): vscode.CodeAction[] | undefined {
        const action = new vscode.CodeAction(`Convert to ${emoji}`, vscode.CodeActionKind.Refactor.append('emojize'));

        if (!this.isAtStartOfSmiley(document, range)) {
            // Tell the user why our action is not available
            action.disabled = 'Selection is not currently on a :)';
            return [action];
        }

        action.edit = new vscode.WorkspaceEdit();
        action.edit.replace(document.uri, new vscode.Range(range.start, range.start.translate(0, 2)), '😀');
        return action;
    }

    ...
}

如果使用者嘗試透過鍵盤快捷鍵應用停用的程式碼操作,VS Code 將向用戶顯示 .disabled 錯誤訊息

Showing the '.disabled' error in the editor

此外,為了幫助發現,停用的程式碼操作在重構源操作上下文選單中顯示為淡入

A '.disabled' Code Action in the Refactor menu

請注意,停用操作不會顯示在頂級燈泡選單中。

如果您的擴充套件使用程式碼操作,請告知我們 CodeAction.disabled 對您是否有用並且能夠實現。

自定義編輯器的編輯功能

我們在此迭代中繼續致力於自定義編輯器提案。提醒一下,自定義編輯器是基於 Webview 的檢視,可用於代替 VS Code 的普通文字編輯器來處理特定檔案型別。從 VS Code 1.41 開始,自定義編輯器現在可以與 VS Code 的撤消/重做和儲存功能整合,這支援許多有趣的用例,包括將它們用作視覺化和所見即所得編輯器。

您可以在vscode.proposed.d.ts中找到當前的 API 提案,我們還整理了一些非常簡單的擴充套件示例,演示瞭如何將自定義編輯器用於文字檔案和二進位制檔案。

如果您對自定義編輯器感興趣,請分享您對當前提案的反饋,並告訴我們您是否能夠實現它。

語義標記提供程式

我們為語義標記提供程式添加了新的提案 API。新的 API 允許擴充套件提供額外的標記資訊,供編輯器用於豐富基於 TextMate 的語法高亮。

每個語義標記都用標記型別和任意數量的標記修飾符註釋一個範圍。例如,型別 variable 和修飾符 membermodification 將描述對成員變數的寫訪問。然後,標記型別和修飾符用於在編輯器中新增樣式。

樣式可以在顏色主題和使用者設定中配置

    "editor.tokenColorCustomizationsExperimental": {
        "variable.member": {
            "foreground": "#35166d"
        },
        "*.modification": {
            "fontStyle": "underline"
        }
    }

如果您對此功能感興趣,我們希望獲得您對當前提案的反饋,並鼓勵進行實驗和一些早期實現。

完整的示例可在vscode-extensions-samples 倉庫中找到。

語言伺服器協議

現在,透過 LSP 提供了對呼叫層次結構檢視的建議支援。

瀏覽器支援

改進了對 Firefox 和 Safari (macOS & iPadOS) 的支援

在此里程碑期間,我們致力於改進 VS Code 在 Firefox 或 Safari 瀏覽器中執行的體驗。我們修復了許多問題以支援這兩種瀏覽器(FirefoxSafari)。在 Firefox 上,由於上游障礙,我們尚未完全支援鍵盤快捷方式,您可以在跟蹤問題 #85252 中閱讀更多詳細資訊。

我們還修復了許多問題,以在 iPadOS 上的 Safari 中啟用基本的 VS Code 功能。核心 UI 元素現在可供觸控和指標裝置訪問。然而,仍存在與預定義鍵盤快捷鍵(EscapeFunction 鍵)、懸停以及觸控友好型 UI/UX 相關的重大障礙。有關更多資訊,請參閱問題 #85254

在瀏覽器中執行的更多功能

上一個里程碑,我們引入了支援從我們的倉庫執行 yarn web 以在瀏覽器中設定 VS Code。此設定仍用於在瀏覽器中測試問題,而不是用於開發。

在此里程碑中,我們添加了更多可測試的功能

  • 除錯
  • 搜尋
  • 任務
  • 問題

這是一個影片,展示了新功能的實際運用

VS Code running in a browser

注意:不要將此設定用於任何嚴肅的開發。目的是讓社群為 VS Code 貢獻更改,以改善瀏覽器中的整體體驗。

工程

Insiders 版本在 yum 儲存庫中可用

Insiders 版本現在可以在 yum 儲存庫中找到,並且像 apt 儲存庫一樣自動釋出。按照網站上的說明設定儲存庫並使用 sudo dnf install code-insiders 進行安裝。

Monaco Editor 的持續構建

本次迭代,我們為 Monaco Editor 添加了持續構建和測試管道。我們從 VS Code 倉庫主分支構建 Monaco Editor 核心,並執行健全性測試,以便儘早發現潛在的錯誤或意外的重大更改。

值得注意的修復

  • 51039:關閉其他標籤頁中的左側編輯器時,差異編輯器也關閉
  • 83746:Web:無法拖放複合和檢視(活動欄、面板)
  • 80026:launch.json 中灰色屬性令人困惑,請刪除它們
  • 83449:輔助功能:在輔助功能模式下 Ctrl+Right(CursorWordAccessibilityRight)應跳轉到下一個單詞的開頭,而不是結尾
  • 83753:停用 console.debug.wordWrap 會剝離換行符和空格
  • 85086:停用 search.usePCRE2 時,全域性搜尋不支援反向引用
  • 36219:Git:“暫存選定範圍”命令將編碼更改為 UTF-8

感謝

最後但同樣重要的是,衷心感謝!以下幫助使 VS Code 變得更好的各位:

對我們問題跟蹤的貢獻

vscode 的貢獻

language-server-protocol 的貢獻

vscode-css-languageservice 的貢獻

debug-adapter-protocol 的貢獻

vscode-chrome-debug-core 的貢獻

vscode-vsce 的貢獻

localization 的貢獻

有超過 800 名 雲 + AI 本地化 社群成員使用 Microsoft 本地化社群平臺 (MLCP),其中約有 100 名活躍貢獻者為 Visual Studio Code 做出貢獻。我們感謝您的貢獻,無論是提供新翻譯、對翻譯投票還是提出流程改進建議。

這是貢獻者的快照。有關專案詳細資訊,包括貢獻者姓名列表,請訪問專案網站:https://aka.ms/vscodeloc

  • 波斯尼亞語(拉丁語,波斯尼亞和黑塞哥維那): Sead Mulahasanović, Ismar Bašanović, Adnan Rizvan。
  • 丹麥語: Lasse Stilvang。
  • 荷蘭語: Lemuel Gomez, Gideon van de Laar。
  • 英語(英國): Martin Littlecott, Alonso Calderon, Daniel Imms, Kamalsinh Solanki。
  • 芬蘭語: Tuula P。
  • 法語: Antoine Griffard, Thierry DEMAN-BARCELÒ, Edouard Choinière, Joel Monniot, Rodolphe NOEL, Alain BUFERNE, Xavier Laffargue, DJ Dakta。
  • 德語: Pascal Wiesendanger, Jakob von der Haar, jan-nitsche, Michael Richter。
  • 希臘語: Valantis Kamayiannis, Θοδωρής Τσιρπάνης。
  • 希伯來語:Ariel Bachar。
  • 印地語: Kiren Paul, Niraj Kumar, Preeti Madhwal, Jaadu Jinn, Mahtab Alam。
  • 匈牙利語: József Cserkó, Kiss Attila Csaba, Krisztián Papp。
  • 簡體中文: 顧弈知, 易婷婷, Justin Liu, Charles Dong, 曾鵬, Tony Xia, 項斌, 鄭一星, paul cheung, 普魯文, 姜盛, 鍾越, Joel Yang, 一斤瓜子, 李志強, 胡亦婷, Alexander ZHANG, 張銳, 楊麗斌, ZHENGCHENG CHEN, 樸光宇, 詹石巖, 楊舜傑, WJ Wang, Siam Chen。
  • 繁體中文: Winnie Lin, 船長, Alan Tsai, TingWen Su。
  • 印度尼西亞語: Eriawan Kusumawardhono, Arif Fahmi, Laurensius Dede Suhardiman, Christian Elbrianno。
  • 義大利語:Alessandro Alpi, Luigi Bruno。
  • 日語: Takayuki Fuwa, 內田貴康, Kyohei Uchida, Koichi Makino, TENMYO Masakazu, Aya Tokura。
  • 韓語: Hongju。
  • 拉脫維亞語:Andris Vilde。
  • 挪威語: Frode Aarebrot, Anders Stensaas, Thomas Ødegård, Thomas Isaksen。
  • 波蘭語: Makabeus Orban, Wojciech Maj, Kacper Łakomski, Oskar Janczak, Szymon Seliga, Mateusz Redynk, Franx Bar。
  • 葡萄牙語(巴西): Marcelo Fernandes, Albert Tanure, Arthur Lima, Nylsinho Santos, Pudda, Matheus Vitti Santos, Rodrigo Crespi, Roberto Fonseca, Felipe Nascimento。
  • 葡萄牙語(葡萄牙): Francisco Osorio, Luís Chaves, Ricardo Sousa Vieira, João Fernandes。
  • 羅馬尼亞語: LaServici, Dan Ichim。
  • 俄語: Vadim Svitkin。
  • 塞爾維亞語(西里爾文): Dusan Milojkovic。
  • 西班牙語: José María Aguilar, Gustavo Gabriel Gonzalez。
  • 泰米爾語: MUTHU VIJAY, Sankar Raj, Kadhireshan S, Pandidurai R, Madhu Chakravarthy, Madhu Maha。
  • 土耳其語: Mehmet Yönügül, mehmetcan Gün, Misir Jafarov, Fırat Eşki, Gökberk Nur, Safa Selim。
  • 烏克蘭語: Arthur Murauskas, Oleksandr Krasnokutskyi。
  • 越南語: Dat Nguyen, Vương, Dao Ngo, Van-Tien Hoang, ng-hai。