2019 年 11 月(版本 1.41)
更新 1.41.1:此更新解決了這些問題。
下載:Windows: x64 | Mac: Intel | Linux: deb rpm tarball snap
歡迎使用 Visual Studio Code 2019 年 11 月版。此版本中有許多更新,希望您會喜歡。以下是其中一些主要亮點:
- 資源管理器中的緊湊資料夾 - 預設摺疊單個子資料夾。
- 編輯差異檢視的左側 - 您現在可以編輯差異檢視中的兩個檔案。
- 鍵入時更新搜尋結果 - 全域性搜尋結果會在您鍵入時更新。
- 問題面板改進 - 按問題型別篩選並限制輸出到活動檔案。
- 縮圖突出顯示錯誤和內容更改 - 快速定位檔案中的問題和更改。
- 終端最小對比度 - 設定首選對比度以提高可見性。
- HTML 標籤中的映象游標 - 在匹配的 HTML 標籤中自動顯示多游標。
- JS/TS 中的可選鏈支援 - 使用
?.運算子簡化巢狀結構的處理。 - 提取介面重構 - 快速將內聯型別提取到 TypeScript 介面。
- 開發容器擴充套件 - 更好地支援在 Docker 容器中開啟儲存庫。
如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。
Insiders:想盡快看到新功能嗎?您可以下載每夜更新的 Insiders 構建版本,並第一時間嘗試最新的更新。有關最新的 Visual Studio Code 新聞、更新和內容,請在 Twitter 上關注我們 @code!
工作臺
資源管理器中的緊湊資料夾
在檔案資源管理器中,我們現在以緊湊形式渲染單個子資料夾。在這種形式下,單個子資料夾將壓縮在一個組合的樹元素中。例如,這對於 Java 包結構很有用。
設定 explorer.compactFolders 控制此行為。預設情況下,此設定處於開啟狀態。

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

注意: 如果您厭倦了按 ⌘S (Windows, Linux Ctrl+S),可以啟用自動儲存(檔案 > 自動儲存)。
從速覽編輯器中儲存
如果您調出速覽檢視並在其中輸入,並且焦點位於該嵌入式編輯器內,您現在可以透過 ⌘S (Windows, Linux Ctrl+S) 儲存更改。

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

主題:GitHub Sharp Dark,字型:FiraCode
在狀態列中顯示當前問題
您現在可以配置 VS Code 在狀態列中顯示當前問題訊息。這使您無需額外的鍵盤或滑鼠手勢即可檢視活動檔案中所選問題的摘要。
注意: 啟用此功能需要啟用設定 problems.showCurrentInStatus。

主題:GitHub Sharp Dark,字型:FiraCode
靈活的篩選框佈局
問題面板中的篩選框現在會根據面板的位置和大小調整其位置。

主題:GitHub Sharp Dark,字型:FiraCode
改進的字型渲染(Windows、Linux)
在上一個里程碑中更新到 Electron 6 時,許多使用者報告說他們的字型渲染有所倒退。具體來說,字型渲染不如以前平滑。我們立即在編輯器中解決了此問題,並在 1.40 恢復版本中提供了修復。然而,工作臺的其他區域仍然存在不理想的字型渲染問題。
在此版本中,我們改進了工作臺更多部分的字型渲染(適用於 Windows 和 Linux)。下面的螢幕截圖顯示了前後對比(放大以顯示差異)。特別是,工作臺的許多樹和列表元素以前使用灰度抗鋸齒渲染,現在使用子畫素抗鋸齒渲染。
之前(左)和之後(右)

我們計劃改進工作臺更多部分的字型渲染。您可以檢視此文字渲染問題查詢以檢視進度。
遠端場景下更快的讀/寫檔案效能
對於檔案系統遠端且延遲較高的場景(例如,在瀏覽器中使用 VS Code 連線較慢或連線到不在同一區域的遠端主機時),讀寫檔案(從文字編輯器)現在應該更快。我們切換到了基於流的讀寫實現,這大大減少了通訊開銷。
搜尋
鍵入時更新搜尋結果
在全文搜尋中,結果現在會在您鍵入時更新。這在構建複雜的正則表示式查詢等場景中特別有用,其中對查詢的快速反饋可以幫助您編寫正則表示式。
在這裡,即時反饋有助於構建正則表示式查詢和替換查詢,以採用 TypeScript 的可選鏈語法

主題:Noctis Hibernus,字型:Hasklig
注意: 可以透過將 search.searchOnType 設定為 false 來停用此功能,並且可以透過 search.searchOnTypeDebouncePeriod(預設值為 300 毫秒)調整鍵入和搜尋之間的延遲。
向搜尋結果新增游標
我們添加了一個命令,可將游標新增到文字搜尋的所有匹配項。在搜尋檢視中,焦點位於檔案的搜尋結果上時,您可以按 ⇧⌘L (Windows, Linux Ctrl+Shift+L),以同時編輯該檔案中的所有匹配項。這與在單個編輯器中使用“查詢”小部件搜尋時使用的鍵盤快捷方式相同。

預設展開所有搜尋結果
以前,如果全文搜尋在單個檔案中返回超過 10 個結果,它將顯示在結果樹中摺疊。然而,這有時會使查詢特定結果變得困難,因此在此版本中,所有結果將顯示為展開。
您可以將 search.collapseResults 設定為 auto 以恢復舊行為。
編輯器
縮圖裝飾錯誤、警告和內容更改
錯誤和警告現在在縮圖(程式碼概覽)中內聯突出顯示。您可以使用新的 minimap.errorHighlight 和 minimap.warningHighlight 主題顏色更改這些裝飾的顏色。
您可以在下面看到縮圖突出顯示了一個細微的逗號丟失錯誤

內容更改裝飾也顯示在縮圖的裝訂線中

您可以使用以下設定修改內容更改顏色
minimapGutter.addedBackgroundminimapGutter.modifiedBackgroundminimapGutter.deletedBackground
您可以使用 scm.diffDecorations 設定更改原始碼管理裝飾的可見性,該設定具有以下值
all- 在所有位置顯示原始碼管理差異裝飾。gutter- 僅在左側編輯器裝訂線中顯示。minimap- 僅在縮圖裝訂線中顯示。overview- 僅在概覽標尺中顯示。none- 不顯示差異裝飾。
程式碼導航備用命令
VS Code 以前在已經位於定義處時選擇“轉到定義”不做任何操作。在此版本中,可以改為執行備用命令。例如,“轉到定義”可以對映為執行“轉到引用”。
這是透過 editor.gotoLocation.alternativeDefinitionCommand 設定定製的。例如,您可以將“轉到定義”的備用設定為“轉到宣告”,反之亦然。如果您更喜歡舊行為,可以將其留空。
速覽、轉到和查詢所有命令
每個“速覽”命令現在都有一個“轉到”對應項。例如,現在有“速覽實現”和“轉到實現”。速覽檢視不會更改當前編輯器,並允許快速在原地檢視原始碼。
下面的影片顯示了使用“速覽實現”在速覽檢視中檢視 ICommandService 介面的所有實現

主題:GitHub Sharp,字型:FiraCode
相比之下,“轉到實現”用於導航,讓您快速到達實現。
下面的影片(使用 "editor.gotoLocation.multipleImplementations": "goto" 設定)透過重複按 F12 導航到 ICommandService 介面的所有實現

主題:GitHub Sharp,字型:FiraCode
最後但同樣重要的是,類似於“查詢所有引用”命令,現在有“查詢所有實現”。它將實現作為穩定的列表顯示在編輯器旁邊。例如,在執行影響介面所有實現的重構時,這可以用作 TODO 列表。

主題:GitHub Sharp,字型:FiraCode
麵包屑和大綱檢視的語言特定篩選
上一個里程碑中,我們添加了從大綱檢視和麵包屑導航中篩選特定型別(例如變數)的功能。此版本完善了此功能,允許語言特定篩選,例如不顯示 TypeScript 變數但顯示 JavaScript 變數。
您可以在下面看到 value 常量是如何在 JavaScript 檔案的大綱檢視中顯示的,但在 TypeScript 版本中沒有顯示。

主題:GitHub Sharp,字型:Fira Code
macOS 上的 IntelliSense 鍵盤快捷方式
IntelliSense 通常透過 Ctrl+Space 觸發。然而,在 macOS 上,如果配置了多個輸入源,此鍵盤快捷方式會被作業系統佔用。這通常會導致混亂,使用者認為 IntelliSense 損壞了。
現在有兩種方法可以處理此問題
- 使用我們為 macOS 新增的新 Alt+Escape 鍵盤快捷方式。
- 透過 系統偏好設定 > 鍵盤 > 快捷鍵 > 輸入源,在 macOS 偏好設定中停用透過 Ctrl+Space 切換輸入源。

螢幕閱讀器輸出
有一個新設定 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定義的特定於語言的規則。
程式碼操作選單鍵盤快捷方式
如果存在,程式碼操作和重構選單現在會顯示自定義鍵盤快捷方式。

整合終端
最小對比度
在終端中使用顏色的應用程式可能很棘手,它們可以使用以下顏色來表示文字
- 預設前景顏色
- 由終端主題定義的 16 種顏色調色盤
- 一組 240 種固定顏色
- 任何 RGB 顏色(1600 萬)
問題在於應用程式不知道預設的背景顏色或前景顏色是什麼,也不知道它是否會與應用程式使用的顏色有良好的對比度。為了解決這個問題,終端現在可以動態更改文字的前景顏色,以滿足指定的對比度要求。
將前景顏色設定為所需的對比度,範圍從 1 到 21
// 4.5 is recommended for baseline website accessibility
"terminal.integrated.minimumContrastRatio": 4.5
終端顏色會增加或減少亮度,直到滿足對比度要求,或者前景變為 #000000 或 #ffffff。

主題:Sapphire,字型:Hack
新的實驗性 WebGL 渲染器
終端提供了一個新的基於 WebGL 的渲染器,與舊的基於 canvas 的方法相比,效能提升高達 900%*。
您可以使用此設定選擇使用新的渲染器
"terminal.integrated.rendererType": "experimentalWebgl"
速度改進歸因於許多因素,但亮點如下
- WebGL 允許我們更直接地與 GPU 通訊,而不是透過 web 平臺的
CanvasRenderingContext2DAPI。 - 渲染器幾乎只處理數字和型別化陣列,速度極快。物件和陣列的建立也保持在最低限度,以避免不必要的垃圾回收。
- 所有字元現在都快取在紋理圖集中,而不僅僅是樣式有限的 ASCII 字元。這意味著重複繪製相同的字元要快得多。
我們觀察到使用 canvas 渲染器時,幀渲染速度根據使用者的硬體/環境而變化很大。每幀通常需要 1 毫秒到 40 毫秒不等,但在硬體問題是因素的極端情況下,可能會達到 200 毫秒以上。到目前為止,WebGL 似乎更加一致,通常在 0.2 毫秒到 2 毫秒的範圍內

一旦整合,可靠性是我們期望改進的事情之一。使用 canvas 渲染器,如果 GPU/canvas 出現問題,瀏覽器會嘗試變得聰明並回退到 CPU 渲染,但我們不希望發生這種情況,因為我們有一個基於 DOM 的渲染器,它更適合這種情況。使用 WebGL,它要麼按預期工作,要麼徹底失敗(無法獲取 WebGL 上下文),在這種情況下,我們可以回退到 DOM 渲染器。
由於渲染所需的時間大大減少,CPU 得以釋放,可以專注於解析傳入資料,從而渲染更多幀並更快地執行命令。以下效能資料是在 vscode 儲存庫中執行 ls -lR 生成的

新的渲染器還修復了 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 屬性。

主題:Nord,字型:Input Mono
HTML 重新命名標籤
您現在可以使用 F2 在 HTML 中重新命名開始/結束標籤對。

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

使用資料來源於 ChromeStatus.org。
Sass 模組支援
Sass 最近引入了新的模組系統。
我們添加了對 SCSS 檔案中 Sass 模組的語法突出顯示支援以及語言功能支援。語言功能包括
@use和@forward的自動完成。@use和@forward路徑的路徑完成。- Sass 內建模組(如
sass:math和sass:color)的自動完成。 @use和@forward匯入路徑的文件連結。

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

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

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

自動插入 ?. 取決於是否啟用了嚴格空檢查。可以使用 "typescript.suggest.includeAutomaticOptionalChainCompletions" 或 "javascript.suggest.includeAutomaticOptionalChainCompletions" 設定停用自動 ?. 插入。
TypeScript 的提取介面重構
新的“提取到介面”重構允許您快速將內聯型別提取到介面,以便可以重用它。

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

JavaScript 和 TypeScript 的分號格式化程式選項
新的 javascript.format.semicolons 和 typescript.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 獲取有關檔案的資訊。但有一個錯誤!.isDirectory 實際上是一個函式,而不是一個屬性!這意味著 handleDirectory 將在每個檔案上呼叫,而不僅僅是按預期在目錄上呼叫,因為函式 isDirectory 已定義且評估為 true。

請注意,您只有在啟用嚴格空檢查時才會看到此診斷。
除錯
除錯 START 檢視
我們引入了一個新的除錯 START 檢視,使使用者更容易在新工作區中開始和配置除錯。根據活動檔案,我們將選擇適當的除錯擴充套件,並使您能夠除錯或執行應用程式。對於更精細的除錯和執行配置,最好還是配置 launch.json 檔案。
您可以在下面看到快速開始除錯 Express JavaScript 應用程式,如果需要更多控制,則建立 launch.json 檔案。

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

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

內聯斷點顯示
新設定 debug.showInlineBreakpointCandidates 控制在除錯時是否在編輯器中顯示內聯斷點候選裝飾。預設情況下,它們是可見的。
預覽功能
預覽功能尚未準備好釋出,但已足夠實用。我們歡迎您在這些功能開發期間提供早期反饋。
搜尋編輯器
在此里程碑中,我們開始致力於在專用編輯器中顯示搜尋結果。這提供了更多空間來檢視搜尋結果,並允許您同時維護多個搜尋結果集合。
在此版本中,在搜尋編輯器中您可以
- 使用“轉到定義”系列命令導航到結果,包括“速覽定義”和“在側面開啟定義”。
- 重新執行搜尋以更新結果列表。
- 檢視結果周圍的原始碼行。
- 將結果儲存到磁碟以便以後參考,甚至在原始碼管理中跟蹤。
我們將在接下來的版本中繼續新增功能並提高可用性。

主題:A Touch of Lilac,字型:Hasklig
注意: 您可以透過將 search.enableSearchEditorPreview 設定為 true 來預覽此功能。
呼叫層次結構檢視
呼叫層次結構 API 在 Stable 中可用,語言擴充套件作者正忙於實現它,因此我們添加了呼叫層次結構檢視。這補充了“速覽呼叫層次結構”檢視,並與“查詢所有引用”和“查詢所有實現”共享同一側邊欄檢視。一旦語言擴充套件支援呼叫層次結構 API,您將能夠從上下文選單或命令面板中選擇“顯示呼叫層次結構”以檢視檢視

主題:GitHub Sharp,字型:FiraCode
呼叫層次結構檢視允許您深入檢視符號的呼叫者和呼叫。它會突出顯示活動編輯器中的呼叫,允許從任何子項重新設定檢視父級,並保留以前執行的歷史記錄。
JavaScript 偵錯程式
我們正在開發用於 Node.js 和 Chrome 的新偵錯程式。您可以安裝 nightly 擴充套件 js-debug-nightly,並透過更新設定以新增以下內容將其用作即插即用替換
{
"debug.chrome.useV3": true,
"debug.node.useV3": true
}
您無需更改現有啟動配置即可使用新偵錯程式。
偵錯程式帶來了一系列新功能,例如除錯和單步執行 webworker 的能力

主題:Earthsong,字型:Fira Code
...除錯 npm 指令碼,無需額外配置或標誌...

...等等!如果您遇到問題,請提交問題。
對擴充套件的貢獻
遠端開發
遠端開發擴充套件的工作仍在繼續,它允許您使用容器、遠端機器或 適用於 Linux 的 Windows 子系統 (WSL) 作為功能齊全的開發環境。
1.41 中的主要功能包括
- 開發容器:更容易在容器中試用示例儲存庫(例如 vscode-remote-try-python)。
- 開發容器:建立容器時效能得到改善,併為
devcontainer.json提供了新選項。 - WSL:支援 Windows 10 ARM 電腦,例如 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 變數、mixin 和函式提供跨檔案語言支援。在此里程碑中,我們幫助其開發了一個新版本 0.8.0。
新版本改進了
- 更好的匯入路徑解析
- 自動完成顏色變數的顏色預覽
- 更好的效能
擴充套件創作
Figma 設計工具包
我們建立了一個 Figma 設計工具包,以更好地幫助擴充套件作者為其擴充套件設計體驗。請檢視 GitHub 上的工具包儲存庫,其中包含有關如何訪問和使用工具包的說明。
下面是所包含的一些元件的示例

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

如果您遇到任何問題或對某些元件有任何要求,請在工具包儲存庫中建立問題,以便我們可以分類和跟蹤請求。
除錯圖示顏色標記
我們為除錯檢視添加了一組新的顏色標記。
除錯工具欄
debugIcon.startForegrounddebugIcon.continueForegrounddebugIcon.disconnectForegrounddebugIcon.pauseForegrounddebugIcon.restartForegrounddebugIcon.stepBackForegrounddebugIcon.stepIntoForegrounddebugIcon.stepOutForegrounddebugIcon.stepOverForegrounddebugIcon.stopForeground

主題:Min Dark,字型:Input Mono
除錯斷點
debugIcon.breakpointForegrounddebugIcon.breakpointDisabledForegrounddebugIcon.breakpointUnverifiedForegrounddebugIcon.breakpointStackframeForegrounddebugIcon.breakpointCurrentStackframeForeground

主題:Min Dark,字型:Input Mono
工作區檔案事件
當檔案和資料夾更改時,有新事件
vscode.workspace.on[Will|Did]CreateFilevscode.workspace.on[Will|Did]RenameFilevscode.workspace.on[Will|Did]DeleteFile
這些事件在透過資源管理器或透過 vscode.workspace.applyEdit(WorkspaceEdit) API 從擴充套件建立、重新命名或刪除檔案時觸發,而不是在檔案在磁碟上更改或透過 vscode.workspace.fs API 修改時觸發。
這些事件的一個可能用例是語言伺服器,它可能會在重新命名檔案之前更新檔案內容,或者在刪除/建立檔案後更新專案檔案。
SnippetString
SnippetString 型別現在具有用於 choice-elements 的構建器方法。
嚴格 getWordRangeAtPosition
TextDocument.getWordRangeAtPosition API 現在更加嚴格,它不再忽略導致空字串匹配的無效正則表示式,而是會丟擲錯誤。
已棄用 extensionKind 的字串型別
擴充套件作者可以使用 package.json 中的 extensionKind 屬性來指示擴充套件在遠端情況下應該在哪裡執行。在版本 (1.40) 中,此值可以是字串或陣列。從本版本開始,此屬性僅支援陣列值,使用字串已棄用。有關詳細資訊,請參閱遠端開發文件。
將 DAP 源轉換為 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 錯誤訊息

此外,為了幫助提高可發現性,停用的程式碼操作在重構和源操作上下文選單中顯示為褪色

請注意,停用的操作不會顯示在頂級燈泡選單中。
如果您的擴充套件使用程式碼操作,請告知我們 CodeAction.disabled 是否對您有用且能夠實現。
自定義編輯器編輯功能
我們在此迭代中繼續致力於自定義編輯器提案。提醒一下,自定義編輯器是基於 webview 的檢視,可用於替換 VS Code 的普通文字編輯器以處理特定檔案型別。截至 VS Code 1.41,自定義編輯器現在可以與 VS Code 的撤消/重做和儲存功能整合,這使得許多有趣的用例成為可能,包括將它們用作視覺和所見即所得編輯器。
您可以在 vscode.proposed.d.ts 中找到當前的 API 提案,我們還整理了一些非常簡單的擴充套件示例,演示瞭如何將自定義編輯器用於文字和二進位制檔案。
如果您對自定義編輯器感興趣,請分享您對當前提案的反饋,並告訴我們您是否能夠實現它。
語義標記提供程式
我們添加了用於語義標記提供程式的新擬議 API。新 API 允許擴充套件提供額外的標記資訊,供編輯器用於豐富基於 TextMate 的語法突出顯示。
每個語義標記都使用標記型別和任意數量的標記修飾符註釋一個範圍。例如,型別 variable 和修飾符 member 和 modification 將描述對成員變數的寫入訪問。然後使用標記型別和修飾符在編輯器中新增樣式。
可以在顏色主題和使用者設定中配置樣式
"editor.tokenColorCustomizationsExperimental": {
"variable.member": {
"foreground": "#35166d"
},
"*.modification": {
"fontStyle": "underline"
}
}
如果您對此功能感興趣,我們希望得到您對當前提案的反饋,並且我們非常鼓勵進行實驗和一些早期實現。
完整的示例可在 vscode-extensions-samples repo 中找到。
語言伺服器協議
現在有透過 LSP 支援呼叫層次結構檢視的擬議支援。
瀏覽器支援
改進對 Firefox 和 Safari(macOS 和 iPadOS)的支援
在此里程碑中,我們專注於改進 VS Code 在瀏覽器中使用 Firefox 或 Safari 時的體驗。我們修復了許多問題以支援這兩種瀏覽器(Firefox、Safari)。在 Firefox 上,由於上游障礙,我們尚未完全支援鍵盤快捷方式,您可以在跟蹤問題 #85252 中閱讀更多詳細資訊。
我們還修復了許多問題,以在 iPadOS 上的 Safari 中啟用基本的 VS Code 功能。核心 UI 元素現在可供觸控和指標裝置訪問。但是,仍然存在與預定義鍵繫結(Escape 和 Function 鍵)、懸停以及觸控友好型 UI/UX 相關的主要障礙。有關詳細資訊,請參閱問題 #85254。
在瀏覽器中執行的更多功能可用
上一個里程碑中,我們介紹了支援從我們的儲存庫執行 yarn web 以設定 VS Code 在瀏覽器中執行。此設定仍然用於在瀏覽器中測試問題,而不是用於開發。
此里程碑中我們添加了更多可以測試的功能
- 除錯
- 搜尋
- 任務
- 問題
這是一個展示新功能執行情況的影片

注意: 不要將此設定用於任何嚴肅的開發。目的是讓社群能夠為 VS Code 做出貢獻更改,以改善瀏覽器中的整體體驗。
工程
Insiders 在 yum 儲存庫中可用
Insiders 版本現在在 yum 儲存庫中可用,並且像 apt 儲存庫一樣自動釋出。按照網站上的說明設定儲存庫並使用 sudo dnf install code-insiders 進行安裝。
Monaco Editor 的持續構建
此迭代中,我們為 Monaco Editor 添加了持續構建和測試管道。我們從 VS Code 儲存庫 main 分支構建 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 變得更好的各位:
對我們問題跟蹤的貢獻
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Alexander (@usernamehw)
- Danny Tuppeny (@DanTup)
對 vscode 的貢獻
- Amir Omidi (@aaomidi):使用 isNaN 而不是 === NaN PR #83790
- Anirudh Rayabharam (@anirudhrb):Git:修復了空儲存庫中暫存時的錯誤 PR #82995
- Anthony Dresser (@anthonydresser):向 git hook 新增篩選器(dev qol) PR #85159
- Jakub Chodorowicz (@chodorowicz):改進 markdown 檔案的 Monokai 主題 PR #85467
- DiamondYuan (@DiamondYuan):fix: 修復 typo CustomEditoInputFactory -> CustomEditorInputFactory PR #85090
- George Batalinski (@georgebatalinski):fix(aria-expanded) on submenues add aria prop PR #79775
- John Murray (@gjsjohnmurray)
- James Inkster (@Grommers00):修復 #84080 為終端新增 cntl-shift-c 和 cntl-shift-v PR #84438
- Vladislav Hadzhiyski (@hadzhiyski)
- Hung-Wei Hung (@hunghw):修復 #83818 - 最佳化 enablePreviewFromQuickOpen 中的描述 PR #83895
- Andrew Liu (@hypercubestart):修復 #82457,markdown 開啟,但源選項卡未聚焦 PR #85506
- Andrii Dieiev (@IllusionMH):改進模板字面量支援以匹配 TS PR #80234
- Jason Ginchereau (@jasongin):修復自動化庫中的次要打包問題 PR #83942
- Jean Pierre (@jeanp413)
- Huáng Jùnliàng (@JLHwung):將
babel.config.json新增到 JSON 驗證模式對映 PR #83758 - Joan Rieu (@joanrieu):記錄 problemMatcher.fileLocation="autodetect" 配置選項 PR #83803
- John Combs (@jscombs91):新增 force-device-scale-factor 到命令列引數 PR #84651
- Robert Jin (@jzyrobert)
- @MartinBrathen:修復第一次單擊時的縮放 PR #83826
- @mltony:使輔助功能模式下的 ctrl+right 跳轉到單詞開頭 PR #83450
- Nilesh Kevlani (@njkevlani):用於從搜尋結果新增多游標的命令和鍵繫結 PR #82510
- okmttdhr (@okmttdhr)
- @OneQuid:修復檔名中包含 '%' 的影像開啟問題 PR #84667
- Osk (@oskosk):解決 installMissingDependencies 命令識別符號中的拼寫錯誤 PR #84056
- Peter Elmers (@pelmers):向 QuickPick 新增可選的 sortByLabel 以控制是否重新排序結果 PR #77297
- Pieter Vanderpol (@petevdp)
- Samuel Bronson (@SamB):也允許 jsconfig.json 中存在尾隨逗號 PR #85479
- Shizeng Zhou (@shizengzhou):修復 #84111 PR #84610
- @smilegodly:將 focusSearch() 新增到 clearSearchResults() 並刪除了重複函式 PR #83617
- Konstantin Solomatov (@solomatov)
- 空雲 (@SoraKumo001):使本地和遠端埠可配置 PR #84958
- Sebastian Pahnke (@spahnke):monaco-editor:在 SimpleEditorModelResolverService 中按資源查詢模型 PR #85129
- 酷酷的哀殿 (@sunbohong):支援 utf-8 編碼猜測 PR #84504
- Tobias Fenster (@tfenster):實現按標記型別篩選 PR #83797
- Valentin Hăloiu (@vially):將父路徑新增到 git clone 命令 PR #85459
- Wojciech Buczek (@Wowol):新增對 git.ignoredRepositories 相對路徑的支援 PR #83466
- ZHAO Jinxiang (@xiaoxiangmoe):將 .cjs 新增到已知 JavaScript 副檔名 PR #85460
對 language-server-protocol 的貢獻
-
Bradley Walters (@bmwalters):修復文件符號列出的錯誤客戶端功能介面 PR #862
對 vscode-css-languageservice 的貢獻
對 debug-adapter-protocol 的貢獻
- Ben Clayton (@ben-clayton):更新 sdks.md PR #82
對 vscode-chrome-debug-core 的貢獻
- Elmi Ahmadov (@ahmadov):修復為屬性設定新值時發生的引用錯誤問題 PR #546
對 vscode-vsce 的貢獻
- Alessandro Fragnani (@alefragnani):透過選項忽略檔案 PR #294
- James Inkster (@Grommers00):修復 #400 允許強制取消釋出擴充套件 PR #405
- Chris S. (@LaChRiZ):如果包路徑是目錄,則使用預設檔名寫入 vsix PR #248
- Nate Drake (@ndrake):將 .vsce 上的許可權設定為 0600;修復 #230 PR #295
對 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.
- 簡體中文: Yizhi Gu, Tingting Yi, Justin Liu, Charles Dong, Peng Zeng, Tony Xia, 斌 項, Yixing Zheng, paul cheung, 普魯文, Sheng Jiang, 鍾越, Joel Yang, 一斤瓜子, Zhiqiang Li, Yiting hu, Alexander ZHANG, 張銳, Libing Yang, 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.