現已釋出!閱讀關於 11 月新增功能和修復的內容。

2023 年 5 月 (v1.79)

更新 1.79.1:本次更新解決了此安全 漏洞

更新 1.79.2:本次更新解決了這些 問題

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


歡迎來到 Visual Studio Code 2023 年 5 月版。此版本包含許多更新,希望您會喜歡,其中的一些主要亮點包括:

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

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

輔助功能

詳細程度設定

已新增其他 accessibility.verbosity 設定,以告知螢幕閱讀器使用者在焦點處於某個功能時如何與其互動。

對於 GitHub Copilot,有提示說明如何透過以下方式訪問 Copilot 聊天檢視和編輯器內程式碼聊天中的可訪問幫助選單:

  • accessibility.verbosity.panelChat
  • accessibility.verbosity.inlineChat

這些幫助選單提供了有關預期內容、如何從輸入框導航到其他元素等方面的資訊。

其他新的 `verbosity` 設定提供了有關特定 VS Code UI 的資訊

  • accessibility.verbosity.keybindingsEditor - 在鍵盤快捷方式編輯器中時。
  • accessibility.verbosity.notebook - 在筆記本中時。

`accessibility.verbosity` 設定預設啟用(設定為 'true'),但您可以單獨將其靜音。

設定編輯器

macOS 上的 VoiceOver 現在會讀取設定編輯器中列舉設定選項的描述。您可以嘗試使用列舉設定,例如 `files.autoSave` 和 `editor.accessibilitySupport`。

onFocusChange option description of files.autoSave setting being displayed by VoiceOver's high-contrast textbox on macOS

工作臺

只讀模式

在某些開發場景下,顯式地將工作區的一些資料夾或檔案標記為只讀可能很有幫助。例如,如果資料夾或檔案內容由另一個程序管理(例如由 Node.js 包管理器管理的 `node_modules` 資料夾),將其標記為只讀可以避免意外更改。

對於此用例,有新的設定可以在資源管理器以及文字和筆記本編輯器中將檔案路徑標記為只讀:

  • files.readonlyInclude - 如果匹配,將檔案設為只讀的路徑或 glob 模式。
  • files.readonlyExclude - 當匹配 `files.readonlyInclude` 時,要跳過設為只讀的檔案的路徑或 glob 模式。
  • files.readonlyFromPermissions - 磁碟上沒有寫入許可權的檔案是否應設為只讀。

根據這些設定的規則,如果一個路徑被視為只讀,您將無法從資源管理器(例如,刪除它)修改它,並且文字或筆記本編輯器將是隻讀的。

為了更臨時地切換隻讀模式,有新的命令可以僅為當前會話更改模式,覆蓋您的設定配置:

  • 將活動編輯器設為會話只讀 - 將活動編輯器標記為只讀。
  • 將活動編輯器設為會話可寫 - 將活動編輯器標記為可寫。
  • 切換活動編輯器會話只讀/可寫 - 在只讀和可寫之間切換。
  • 重置活動編輯器會話只讀 - 重置會話狀態。

Windows UNC 主機允許列表改進

作為 重要安全修復 的一部分,VS Code 引入了 UNC 主機的允許列表。在此里程碑中,我們解決了 Windows 使用者在使用 VS Code 進行日常工作時,對 UNC 路徑遇到的許多可用性問題。

對話方塊改進

啟動時允許 UNC 主機的確認對話方塊現在會更新 `security.allowedUNCHosts` 設定,並在您選中複選框時新增主機。

Windows UNC allow dialog

此外,點選“瞭解更多”按鈕將不再關閉對話方塊。

新的 security.restrictUNCAccess 設定

新的 `security.restrictUNCAccess` 設定可讓您停用主機的 UNC 允許列表,並將行為恢復到此安全修復之前的狀態。我們強烈建議不要更改此設定,因為它會使您的系統再次容易受到 資訊洩露漏洞 的影響。

新的標籤頁大小調整選項已修復

`workbench.editor.tabSizing` 設定有一個新選項 `fixed`,可使每個標籤頁寬度相等。當空間變得有限時,標籤頁會均勻縮小至最小值。新的 `workbench.editor.tabSizingFixedMaxWidth` 設定定義了標籤頁的初始大小。

在此模式下,當您使用滑鼠快速關閉標籤頁時,標籤頁的寬度將保持穩定,以便透過單擊同一位置來關閉每個標籤頁。然後,當您將滑鼠移出編輯器標籤頁區域時,寬度會進行調整。

網路質量指示

當您連線到遠端計算機時,VS Code 遠端編輯功能最佳體驗需要低延遲的良好網路連線。在此版本中,我們更新了狀態列中的遠端指示器,以便在延遲非常高或網路連線似乎已離線時為您提供一些反饋。

高延遲(Web、桌面)

我們會定期測量到您連線的遠端裝置的延遲。當達到某個閾值時,遠端指示器將更新以反映這一點。

Slow network detection shown in the right of the Status bar

離線檢測(僅限 Web)

如果您正在使用 Web 瀏覽器連線到遠端裝置,並且突然失去網際網路連線,遠端指示器將更新以反映這一點。

Web offline detection displaying "Network appears to be offline" message from the Status bar

繼續處理

繼續處理”功能允許您在同一倉庫的 VS Code 開發環境之間儲存和檢索工作更改,例如,當您從本地 Git 倉庫升級到 GitHub codespace 時,或在同一倉庫的不同計算機之間切換時。

您現在可以在 GitHub 倉庫的不同開發環境之間傳輸工作更改,即使一個環境中的遠端連線配置為 HTTP,另一個環境配置為 SSH。此外,我們已開始傳輸額外的 workbench 狀態,例如您的原始碼管理檢視狀態偏好設定,以實現更無縫的過渡。

編輯器

貼上為

當將檔案貼上到文字編輯器時,您可能有多種插入方式。您可能希望有一個指向檔案的絕對路徑。您可能希望有一個相對於當前工作區的路徑。甚至可能希望使用特定於當前編輯器語言的方式,例如在 Markdown 中貼上檔案時插入 Markdown 連結。VS Code 新的“貼上為”功能可讓您控制如何插入貼上的內容。

粘貼後,如果還有其他方式可以插入貼上的內容,VS Code 現在會顯示一個小的“貼上為”控制元件。

您可以透過單擊它或使用鍵盤快捷方式 ⌘. (Windows、Linux Ctrl+.) 來開啟“貼上為”控制元件。當您開始鍵入或將游標移出插入的文字時,貼上選擇器將消失。您還可以使用 `"editor.pasteAs.showPasteSelector": "never"` 完全停用下拉選擇器控制元件。

當您將內容貼上到筆記本的 Markdown 單元格中時,“貼上為”控制元件允許您在以下選項之間切換:

  • 將圖片插入為附件
  • 插入 Markdown 圖片引用
  • 插入相對路徑(適用於工作區中的檔案)
  • 插入絕對路徑

如果您希望在實際貼上之前選擇剪貼簿中的內容如何貼上,您可以改用新的“貼上為...”命令。這允許您選擇如何貼上內容。

Using the Paste As... command to select how content is pasted

快速建議和程式碼片段

快速建議意味著 VS Code 會在您鍵入時顯示建議,而無需按 ⌃Space (Windows、Linux Ctrl+Space)。此功能非常受歡迎,約 90% 的建議會話是透過鍵入啟動的。大量建議是透過 `Tab` 接受的(而不是 Enter 和鍵入接受字元)。

當正在插入程式碼片段時,`Tab` 鍵用於在程式碼片段佔位符之間導航。現在,當快速建議在插入程式碼片段時變為活動狀態時,`Tab` 鍵可以接受一個完成項**或**導航到下一個程式碼片段佔位符。為了解決此衝突,有一個 `editor.suggest.snippetsPreventQuickSuggestions` 設定,用於在插入程式碼片段時停用快速建議。它預設為 `true`,只要此設定存在,我們就收到了關於其令人困惑的反饋。因此,我們決定將其預設值更改為 `false`,以便在程式碼片段佔位符內鍵入將觸發快速建議。

然後,您可以使用以下按鍵:

  • 按 `Tab` 接受完成項。
  • 按 `Escape` 隱藏快速建議。
  • 而沒有建議時按 `Tab` 鍵將導航到下一個程式碼片段佔位符。

終端

fish shell 的自動 shell 整合

Shell 整合及其增強的使用者體驗現在將自動啟用 fish shell。您可能需要更新 fish 才能使此功能正常工作。

Shell integration in fish enables several features

上劃線支援

ECMA-48 中指定的上劃線轉義序列(`SGR 53`、`SGR 55`)現在在終端中得到支援。此序列最常見的用法是在應用程式的“狀態列”上方新增一行,位於終端的最後一行。

The overline feature is similar to underline but will draw a line on top of the text

原始碼管理

預設分支名稱

從本版本開始,使用 VS Code 建立的所有新 Git 倉庫都將 `main` 設定為預設分支。如果您偏好不同的預設分支名稱,可以使用 `git.defaultBranchName` 設定進行更改。當該設定為空時,VS Code 將遵循 Git 中配置的預設分支名稱。將資料夾釋出到 GitHub 也會遵守 GitHub 上配置的預設分支名稱。

分支選擇器與 vscode.dev 和 GitHub 的整合

您現在可以從 VS Code 桌面的分支選擇器中檢出 vscode.dev 上的分支或在 GitHub.com 上開啟它。

在下面的短影片中,分支選擇器下拉列表中列出的每個分支右側都有按鈕,用於“在 GitHub 上開啟”或“在 vscode.dev 上檢出”。

相似度閾值

Git status 使用相似度索引(新增/刪除數量與檔案大小的比較)來確定新增/刪除對是否被視為重新命名。您現在可以使用 `git.similarityThreshold` 設定配置相似度閾值,該設定的值介於 `0` 和 `100` 之間。預設值為 `50`。

Notebook

您現在可以從“搜尋”控制元件中搜索開啟的筆記本中的富內容。如果您的筆記本已開啟,“搜尋”控制元件會根據其在筆記本編輯器中的顯示方式顯示結果(而不是搜尋原始原始檔的內容)。這還允許替換筆記本輸入中的文字。

使用新的筆記本搜尋切換,您還可以篩選希望搜尋的單元格內容的型別。

改進的單元格輸出互動

添加了新的上下文鍵 `notebookOutputInputFocused`,用於確定單元格輸出中的文字框是否具有焦點,以便在輸出具有焦點時安全地使用原始熱鍵 a/b/j/k。聚焦於輸入框會阻止這些熱鍵觸發。

執行時格式化

筆記本現在可以在單元格執行時格式化單元格。這將觸發“執行單元格”、“執行全部”、“執行上方/下方”以及核心+執行組合命令。可以透過設定 `"notebook.formatOnCellExecution": true` 來啟用此功能。

儲存時執行程式碼操作

筆記本現在支援在儲存時執行程式碼操作。程式碼操作可以在 `notebook.codeActionsOnSave` 設定下指定。擴充套件作者可以使用標準的單元格級程式碼操作型別定義提供程式,或使用新的 `notebook.` 字首定義管理整個筆記本的程式碼操作。您可以查閱 clean-nb-imports-ext 示例擴充套件,瞭解擴充套件如何使用此新設定。

語言

TypeScript 5.1

VS Code 現在附帶 TypeScript 5.1.3。此主要更新帶來了新的 TypeScript 語言功能、更好的效能以及許多重要的改進和錯誤修復。您可以在 TypeScript 部落格上閱讀有關 TypeScript 5.1 的資訊。

JSX 標籤的連結編輯

透過連結編輯,當您更改 JSX 開始標籤時,VS Code 將自動更新相應的結束標籤。這可以節省大量時間。

此功能預設關閉,但可以透過設定啟用:

"editor.linkedEditing": true

您還可以透過“開始連結編輯”命令顯式啟動連結編輯。

使用 F2 重新命名匹配的 JSX 標籤

當您在 JSX 標籤上觸發重新命名時,VS Code 現在僅重新命名匹配的標籤,而不是嘗試更新該標籤的所有引用。

這需要 TypeScript 5.1+,並且與 HTML 中的重新命名方式相匹配。

您可以使用 `javascript.preferences.renameMatchingJsxTags` 和 `typescript.preferences.renameMatchingJsxTags` 停用此行為。

JSDoc @param 補全

編寫 JSDoc 註釋時,VS Code 現在會顯示所有缺失引數的建議。

JS Doc @param completions in a TypeScript file

這可以幫助您快速填寫文件。

在 JavaScript 檔案中,`@param` 補全會為引數型別描述建立佔位符。

拖放或貼上到 Markdown 時將外部媒體檔案複製到工作區

想在 Markdown 文件中新增圖片或影片?無需先手動將檔案複製到工作區,然後再為其新增連結,現在您可以直接將檔案拖放或貼上到 Markdown 中。如果該檔案當前不屬於工作區,VS Code 將自動將其複製到工作區並插入指向它的連結。

這對於剪貼簿中的影像資料也效果很好。例如,如果您使用 Windows 的截圖工具進行截圖,您可以在 Markdown 檔案中按“貼上”,VS Code 將從剪貼簿資料建立一個新的影像檔案,並插入指向該新檔案的 Markdown 影像連結。如果您在 macOS 上 按住 Ctrl 鍵截圖 以將其複製到剪貼簿,此功能同樣適用。

您還可以使用幾個設定來自定義此功能的行為:

markdown.copyFiles.destination

`markdown.copyFiles.destination` 設定控制新媒體檔案的建立位置。此設定將匹配當前 Markdown 文件的 globs 對映到影像目標。影像目標還可以使用一些簡單的變數。有關可用變數的資訊,請參閱 `markdown.copyFiles.destination` 設定描述。

例如,如果我們希望工作區中 `docs` 下的每個 Markdown 檔案將新媒體檔案放入當前檔案特定的 `images` 目錄中,我們可以這樣寫:

"markdown.copyFiles.destination": {
  "/docs/**/*": "images/${documentBaseName}/"
}

現在,當新檔案貼上到 `/docs/api/readme.md` 中時,影像檔案將在 `/docs/api/images/readme/image.png` 建立。

您甚至可以使用簡單的正則表示式轉換變數,類似於程式碼片段。例如,此轉換在建立媒體檔案時僅使用文件檔名首字母:

"markdown.copyFiles.destination": {
  "/docs/**/*": "images/${documentBaseName/(.).*/$1/}/"
}

當新檔案貼上到 `/docs/api/readme.md` 中時,影像現在將建立在 `/docs/api/images/r/image.png` 下。

markdown.copyFiles.overwriteBehavior

`markdown.copyFiles.overwriteBehavior` 設定控制新建立的媒體檔案是否覆蓋現有檔案。

預設情況下,VS Code 絕不會覆蓋現有檔案。相反,如果您有一個名為 `image.png` 的檔案,並嘗試將其貼上到工作區中已存在同名檔案的 Markdown 文件中,VS Code 將建立一個名為 `image-1.png` 的新檔案。如果您然後嘗試貼上另一個名為 `image.png` 的檔案,它將被建立為 `image-2.png`。

如果您希望將現有檔案被新檔案覆蓋,請設定 `"markdown.copyFiles.overwriteBehavior": "overwrite"`。現在 VS Code 將始終使用原始檔名,覆蓋該路徑下的任何現有檔案。

停用將檔案複製到工作區

僅當檔案不屬於工作區時,VS Code 才會嘗試將檔案複製到您的工作區。此外,目前我們只將媒體檔案(圖片、影片、音訊)複製到工作區。

但是,如果您發現此新行為過於侵入,您可以透過設定將其停用(適用於拖放和貼上):

"markdown.editor.drop.copyIntoWorkspace": "never"
"markdown.editor.filePaste.copyIntoWorkspace": "never"

Markdown 檔案中 HTML 路徑的 IntelliSense

許多 Markdown 方言允許在 Markdown 文件中使用原始 HTML 標籤。在此更新中,我們已將 VS Code 的大多數 Markdown IntelliSense 功能擴充套件到這些 HTML 標籤中使用的檔案路徑。這包括對以下方面的支援:

Finding all references to an image file used in an HTML tag

將音訊插入 Markdown

當您將音訊檔案拖放到 Markdown 文件中或複製貼上到其中時,VS Code 現在會插入一個 `<audio>` 元素。

JSON with Lines (JSONL) 檔案的語法高亮

JSON with Lines 描述了一系列由換行符分隔的 JSON 物件。如果使用了副檔名 `jsonl`,VS Code 將提供語法高亮。

遠端開發

遠端開發擴充套件允許您透過 SSH 或遠端隧道使用開發容器、遠端機器或適用於 Linux 的 Windows 子系統 (WSL) 作為功能齊全的開發環境。

亮點包括:

  • 在當前或新的 VS Code 視窗中開啟新的遠端連線(透過遠端隧道,連線到開發容器)。
  • 使轉發的埠公開的更簡便的工作流程。
  • 對從 VS Code for the Web (vscode.dev) 連線到 WSL 的初步支援。

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

對擴充套件的貢獻

GitHub Copilot

在 Stable VS Code 中使用 Copilot Chat

以前,您必須使用 VS Code Insiders 才能使用 Copilot Chat。從 VS Code 1.79 開始,您也可以在 Stable VS Code 中使用 Copilot Chat。您仍然需要安裝 GitHub Copilot Chat 擴充套件。

編輯器聊天

我們改進了編輯器聊天,最值得注意的是,我們已將其預設模式更改為“livePreview”。在此模式下,更改會直接應用於文件,並顯示為嵌入式 diff 檢視。讓我們看下面的示例:

  • 向 `IUserFriendlyStatusItemEntry` 型別添加了一個新屬性,並且
  • Copilot 相應地更新了 `isUserFriendlyStatusItemEntry` 檢查。
  • 回覆顯示在編輯器中,使用嵌入式 diff 檢視。其右側是可編輯的,並由 VS Code 的語言擴充套件進行檢查。
  • 這可以幫助您發現回覆中的錯誤(`isMarkdownString` 函式不存在下方),並在接受建議之前進行修復。

Copilot inline chat suggestion with proposed code change displayed as a live preview

筆記本改進

本月我們改進了筆記本編輯器中的聊天體驗。當在筆記本文件中使用 Copilot 時,Copilot 可以利用筆記本上下文提供更相關的建議。例如,程式碼建議會使用前一個單元格中定義的變數或模組,而無需重新建立或重新匯入它們。

執行筆記本單元格時,Copilot 現在還為單元格執行失敗提供建議。您可以透過選擇狀態列上的“使用 Copilot 修復”操作來顯示這些建議。

Copilot 建議在單元格執行時也會自動接受,因此您無需手動接受它們。

GitHub Pull Request and Issues 整合

當安裝並啟用了 GitHub Pull Requests and Issues 擴充套件,並且您正在檢視審閱執行緒時,現在可以直接使用 Copilot 應用審閱評論。您可以透過評論選單中的“應用 AI 建議”按鈕執行此操作。

實驗性快速提問體驗

主題:熊貓主題(在 vscode.dev 上預覽)

在此迭代中,我們嘗試使用聊天功能,以便在不離開當前上下文的情況下提出快速的程式設計問題。如果您可以訪問聊天體驗,可以使用以下設定啟用此功能:

"chat.experimental.quickQuestion.enable": true

功能概述

  • 向 Copilot 提出一個快速問題。
  • 使用 ⇧⌥⌘L (Windows、Linux Ctrl+Shift+Alt+L) 切換體驗(狀態會保留 30 秒,因此您可以輕鬆地顯示、隱藏,然後再顯示)。
  • 一個“在聊天中開啟”按鈕,用於將對話繼續到聊天檢視中的長格式聊天。

刪除聊天條目

您現在可以透過單擊聊天請求中的 X 圖示來刪除聊天請求/響應對。

A chat request with X icon

為什麼要這樣做?有時,Copilot 會提供一個跑題或不正確的回覆。您可以重新提出問題,但從會話的聊天曆史記錄中刪除錯誤的回覆也有助於保持對話的軌道。每個聊天請求的上下文量也是有限的,因此刪除一個較長的錯誤回覆可能有助於節省您的上下文預算,以便獲取更有用的資訊。

將聊天會話從側邊欄移動到編輯器

透過執行“Chat: Open Editor”命令,已經可以將在編輯器中開啟聊天會話,但現在也可以在側邊欄和編輯器之間來回移動聊天會話。您可以在聊天檢視標題或編輯器標題選單的“...”選單下找到“在編輯器中開啟會話”和“在側邊欄中開啟會話”命令。

聊天會話歷史記錄

您的聊天會話現在已儲存到歷史記錄中,您可以透過在聊天檢視標題選單中選擇“顯示歷史記錄”按鈕來瀏覽。您可以選擇一個歷史記錄條目,將其載入到聊天編輯器中,然後無縫地從上次中斷的地方繼續。您可以將刪除會話從歷史記錄中刪除,方法是單擊每行的 X 按鈕。

將聊天會話匯出到 JSON 檔案

我們添加了一個命令“Chat: Export Session”,該命令會將當前聚焦的聊天會話匯出到 JSON 檔案。然後,您可以執行“Chat: Import Session”命令匯入此會話並繼續您的對話。您可以將此檔案提交到您的儲存庫,與他人共享,或者僅儲存您的對話以供以後參考。請注意,當您在匯入的聊天會話中繼續對話時,新的訊息不會被儲存,除非您再次匯出該會話。

程式碼塊導航和鍵盤繫結

我們添加了一些命令和鍵盤繫結,使處理聊天響應中的程式碼塊更加容易。“Chat: Next Codeblock”(⌥⌘PageDown (Windows、Linux Ctrl+Alt+PageDown))和“Chat: Previous Codeblock”(⌥⌘PageUp (Windows、Linux Ctrl+Alt+PageUp))將游標移動到當前聊天響應中的下一個或上一個程式碼塊。當代碼塊具有焦點時,程式碼塊工具欄中的命令也可以從命令面板呼叫,或者您可以為其分配鍵盤繫結。“在終端中執行”預設已分配鍵盤繫結 ⌃⌥Enter (Windows、Linux Ctrl+Alt+Enter)。並且當您在程式碼塊中按下正常的複製鍵盤繫結而沒有選擇內容時,將執行“複製”命令。

我們還添加了鍵盤繫結來聚焦聊天視窗(⌃⌘I (Windows、Linux Ctrl+Alt+I))和清除聊天會話()。

Copilot YouTube 播放列表

要了解有關 GitHub Copilot 的更多資訊,以及技巧和最佳實踐,請檢視 YouTube 上的 VS Code Copilot 系列。在那裡,您會找到 GitHub Copilot 簡介特定語言 的用法,以及在使用 Copilot 進行開發時有關有效提示的指導。

Python

在專用終端中執行 Python 檔案

安裝的 Python 擴充套件現在將為每次使用編輯器頂部的“執行”按鈕或“Python: Run Python File in Terminal”命令執行的檔案建立一個新終端,並且每次重新執行時都會繼續使用該檔案的“專用”終端。

任何時候,如果您想在單獨的終端中運行同一個檔案,您可以在“執行”按鈕選單下選擇“Python: Run Python File in Dedicated Terminal”。

Options under the run button menu

測試發現和執行重寫

本月,我們開始以實驗形式逐步推出我們的測試重寫。此重寫重新設計了擴充套件中 unittest 和 pytest 測試發現和執行的底層架構。雖然它沒有提供任何額外暴露給使用者的功能,但它減少了易出錯的行為,併為未來的功能開放了新的可能性。重寫正在透過 `pythonTestAdapter` 實驗進行推廣,您可以使用 `settings.json` 中的 `python.experiments.optInto` 來選擇加入或退出。最終,我們計劃移除此設定並採用新的架構。如果您對本次實驗或重寫有任何意見或建議,請在 vscode-python 倉庫中分享。

Pylance 的可配置索引限制

有一個新的 Pylance 設定允許您配置索引的檔案計數限制:`"python.analysis.userFileIndexingLimit"`,預設設定為 2000。當處理非常大的專案並且您願意犧牲效能以獲得增強的 IntelliSense 體驗時,此設定會很有幫助。

Jupyter

恢復對遠端 Jupyter 核心的單元格執行

安裝的 Jupyter 擴充套件現在支援在關閉 VS Code 後重新開啟 Notebook 時,恢復對遠端 Jupyter 核心的單元格執行(如果單元格仍在忙碌執行)。

例如,假設您執行一段長時間執行的程式碼,例如針對遠端 Jupyter 核心的模型的訓練。這可能需要幾分鐘或更長時間,因此您可能決定在此期間關閉 VS Code。幾分鐘後,VS Code 重新啟動,並打開了同一個筆記本,如果單元格仍在忙碌執行,此狀態將在筆記本單元格中反映出來,並且任何新輸出都將在單元格輸出中顯示。

另一方面,如果在 VS Code 關閉期間單元格已完成執行,則在此期間生成的輸出將不會保留在筆記本中。以這種方式恢復執行並顯示新輸出僅限於簡單的輸出,例如純文字、HTML、影像等。不支援恢復小部件和其他複雜輸出的狀態。

Resuming notebook cell execution after closing and reopening VS Code

GitHub 拉取請求和議題

GitHub 拉取請求和問題擴充套件取得了更多進展,該擴充套件允許您處理、建立和管理拉取請求和問題。亮點包括

  • 用於檢視已簽出 PR 的 diff 的兩個新操作:**與 Pull Request Head 比較 Base(只讀)**和**與本地比較 Pull Request Head**。
  • 新的 ` "githubPullRequests.pullPullRequestBranchBeforeCheckout" ` 設定可用於在再次簽出已簽出的 PR 分支時關閉拉取該分支。

請參閱擴充套件 0.66.0 版本發行說明,瞭解其他亮點。

預覽功能

insiders.vscode.dev 上的專案範圍 JS/TS IntelliSense

vscode.dev 是完全在瀏覽器中執行的 VS Code 的輕量級版本。本次迭代,我們極大地豐富了 vscode.dev 的 JavaScript 和 TypeScript 支援,使其能夠分析工作區中的所有檔案,而不是僅限於當前開啟的檔案。這極大地改進了程式碼導航,讓您可以進行轉到定義查詢所有引用到某個符號。它還透過確保您的 tsconfig.json / jsconfig.json 中的設定得到尊重來改進 IntelliSense。我們甚至現在支援在編寫程式碼時自動匯入。

在下圖中,引用檢視顯示了工作區中對 ITextDocument 的所有引用。

Find All References in a TypeScript project on vscode.dev

這些新的 IntelliSense 功能適用於您從本地計算機開啟的資料夾,以及您使用 vscode.dev 內建的 GitHub Repositories 擴充套件開啟的 GitHub 儲存庫。

請記住,vscode.dev 上的 JS/TS IntelliSense 仍然存在一些限制。

  • 目前不支援第三方庫的 IntelliSense。
  • 目前不支援 JavaScript 專案的 自動型別獲取
  • 由於上述限制,vscode.dev 上的所有型別錯誤都已停用。
  • 專案範圍的 IntelliSense 目前僅在 vscode.dev 的 Insiders 版本中啟用:insiders.vscode.dev。此功能目前在 github.dev 上停用。

我們計劃在未來解決這些限制,並熱衷於繼續在 Web 上豐富我們的 JavaScript 和 TypeScript 支援!

終端中的影像

終端中現在支援實驗性的影像顯示。終端中的影像通常透過將影像畫素資料編碼為文字來工作,該文字透過特殊的轉義序列寫入終端。當前支援的協議是 sixeliTerm 開創的內聯影像協議

透過設定啟用此功能

"terminal.integrated.experimentalImageSupport": true

啟用後,要進行測試,您可以從 libsixel 儲存庫下載 .six 示例檔案並在終端中使用 cat 命令。

Running cat with a sixel file will print an image

或者使用 imgcat python 包imgcat 指令碼以及 png、gif 或 jpg 檔案。

Running imgcat with a png file will print the image

此功能目前存在侷限性:

TypeScript 5.2 支援

此更新包括對即將釋出的 TypeScript 5.2 版本的支援。請檢視 TypeScript 5.2 迭代計劃,瞭解有關 TypeScript 團隊當前工作內容的更多詳細資訊。一些令人興奮的未來工具亮點包括:

  • 新的內聯常量重構。
  • 新的 移到檔案重構,允許您將符號移到現有檔案中。

要開始使用 TypeScript 5.2 夜間構建,請安裝 TypeScript Nightly 擴充套件。

JavaScript 和 TypeScript 的移到檔案重構

TypeScript 5.2 夜間構建中的移到檔案重構允許您將類、函式或常量移到現有檔案中。這還將自動更新對該符號的所有引用,並根據需要更新匯入。

當您選擇移到檔案時,VS Code 會顯示當前 TypeScript 或 JavaScript 專案中的所有檔案列表。您可以開始輸入以快速找到所需檔案。

或者,您可以使用選擇現有檔案...透過正常的​​檔案選擇器選擇檔案,或輸入新檔案路徑...指定一個應建立的新檔案。

此功能仍在積極開發中,請嘗試一下並分享您的反饋!

VS Code for the Web 中的 WebAssembly

為了增加對 vscode.dev 的程式語言支援,VS Code 團隊一直在研究如何在 VS Code for the Web 中執行通用的 WebAssembly。如果您對此方法感興趣並想了解更多資訊,請檢視最近的 VS Code 和 WebAssembly 部落格文章。

擴充套件創作

本地檔案 vscode.fs 效能改進

當您使用 vscode.fs API 處理檔案時(您應該這樣做!),擴充套件主機上的檔案操作現在將更快地解析。

以前,擴充套件主機會將這些操作委派給 VS Code 客戶端執行,但現在它們直接在擴充套件主機內部執行,從而節省了往返。

更嚴格的狀態列 API

建立狀態列項的 API createStatusBarItem 允許擴充套件傳遞一個識別符號。此識別符號用於控制狀態列項的隱藏和顯示。識別符號應對於擴充套件是唯一的,但到目前為止,這並未強制執行。在此版本中,我們對此進行了一些嚴格的規定,由同一擴充套件使用相同識別符號建立的狀態列項現在將被合併為一個。

任務

用於在任務完成時關閉終端的任務呈現選項已最終確定。

提議的 API

每個里程碑都會帶來新的提議 API,擴充套件作者可以嘗試這些 API。一如既往,我們希望得到您的反饋。以下是嘗試提議 API 的步驟

  1. 查詢您要嘗試的提議並將其名稱新增到 package.json#enabledApiProposals
  2. 使用最新的 @vscode/dts 並執行 npx @vscode/dts dev。它會將相應的 d.ts 檔案下載到您的工作區。
  3. 您現在可以根據該提議進行程式設計。

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

EnvironmentVariableCollection.description

此提案允許為 EnvironmentVariableCollection 指定描述,該描述將顯示給使用者在終端選項卡懸停處,解釋確切的更改內容。

// Example of what the Git extension could use
context.environmentVariableCollection.description = 'Enables a Git authentication provider';

Environment variable collection descriptions are explained in a terminal tab's hover

EnvironmentVariableMutator.options

此提案為 EnvironmentVariableMutators 添加了可以提供的選項,允許您確切指定何時應用環境變數更改,是在程序建立時還是在 shell 整合指令碼中(在 shell 初始化指令碼執行之後)。

const collection = context.environmentVariableCollection;
// Apply only when the process is created
collection.replace('FOO', 'bar');
// Apply only during the shell integration script
collection.replace('FOO', 'bar', {
  applyAtProcessCreation: false,
  applyAtShellIntegration: true
});
// Apply twice, during process creation and the shell integration script
collection.replace('FOO', 'bar', {
  applyAtProcessCreation: true,
  applyAtShellIntegration: true
});

共享提供程式

共享 API 提案允許擴充套件提供共享 VS Code 中資源的方法。

共享提供程式的結果目前作為頂級共享...命令面板操作以及命令中心附近的新圖示顯示,前提是您已透過 "workbench.experimental.share.enabled": true"window.commandCenter": true 選擇加入。

您可以在API 提案 #176316 中留下反饋。

靜態狀態列項

狀態列項現在可以透過 package.json#contributes/statusBarItems 靜態貢獻。透過此貢獻點,擴充套件可以延遲其啟用,並且僅在與狀態列項互動時(例如,透過命令)啟用。啟用後,擴充套件可以透過 vscode.window.createStatusBarItem API 訪問其靜態狀態列項。

workspace.save 和 workspace.saveAs

儲存編輯器 API 提案允許擴充套件觸發儲存編輯器的流程,無論是儲存到其資源還是要求使用者提供資源。

所有儲存方法都將返回結果 Uri,如果操作被取消,則返回 undefined。未命名的檔案將始終要求使用者提供目標,除非已關聯路徑。

身份驗證 authGetSessions 提議 API

隨著我們向多個 GitHub 賬戶支援邁進,我們有一個新的提議的身份驗證 API,它允許您的擴充套件獲取特定作用域集的所有可訪問會話。這些 API 新增的提案有幾點需要注意:

  • 引入 vscode.authentication.getSessions 以獲取您的擴充套件可以訪問的每個賬戶的會話。如果您想請求其他賬戶,請使用 { createIfNone: true, clearSessionPreference: true } 來要求使用者選擇一個賬戶。
  • forceNewSession 屬性現在可以接受一個 { sessionToRecreate: session } 物件,以便消耗擴充套件可以指定它們想要重新建立的確切會話。
  • 身份驗證提供程式實現的 createSession 函式現在將接收要重新建立的會話(如果 forceNewSession 的值為 true,則使用擴充套件的會話首選項)。

GitHub 身份驗證擴充套件仍有更多工作要做才能準備好採用,因此如果您有興趣,可以關注並在跟蹤此提案的 issue 中提供反饋

視窗活動 API

有一個新的 API 可用於通知擴充套件視窗何時變為活動或非活動狀態。這可用於處置或建立可以閒置以節省資源的持久化資源或程序。

這是透過向現有 WindowState 型別新增新的 active 布林值來實現的。

vscode.window.onDidChangeWindowState(state => {
  if (state.active && !longRunningProcess) {
    longRunningProcess = startLongRunningProcess();
  } else if (!state.active && longRunningProcess) {
    longRunningProcess.end();
    longRunningProcess = undefined;
  }
});

工程

Electron 沙箱已為所有使用者啟用

我們很高興地宣佈,Electron 沙箱正在向我們所有使用者推出。這是一個始於 2020 年初的旅程,現在終於結束了。您可以參考將 VS Code 遷移到程序沙箱部落格文章以獲取更多詳細資訊。

擴充套件主機重新啟動參與

工作臺中的某些操作可能會導致擴充套件主機在不重新載入當前視窗的情況下重新啟動。例如,當您切換配置檔案時,VS Code 會重新啟動擴充套件主機以處理該配置檔案執行的一組不同的擴充套件。

然而,一些自定義編輯器和筆記本編輯器在切換配置檔案後可能不再具有功能,因為在配置檔案中未安裝必需的擴充套件。如果編輯器有未儲存的更改,這可能導致資料丟失。作為一種修復,VS Code 中的元件現在可以參與擴充套件主機的重新啟動,並確保在擴充套件主機重新啟動之前儲存所有未儲存的更改。

我們計劃在下一個里程碑中進一步開發此體驗,敬請期待更多內容!

Windows 8 和 8.1 支援已結束

正如我們在v1.77 發行說明中所述,v1.79 是最後一個支援 Windows 8 / Windows Server 2012 和 Windows 8.1 / Windows Server 2012 R2 的版本。有關其他資訊,請參閱我們的常見問題解答

里程碑自動化

我們在所有 GitHub 儲存庫中都實現了自動化的里程碑複製。這意味著在 microsoft/vscode 中建立的月度里程碑為所有其他建立和維護的里程碑奠定了基礎。

Microsoft Build 上的 VS Code

如果您錯過了Microsoft Build 2023的直播,您可以在 Microsoft Developer YouTube 頻道上觀看主題演講和會議。

對 VS Code 使用者特別感興趣的一些會議包括:

值得注意的修復

  • 165933 [emmet] 2023 年的 http-equiv="X-UA-Compatible"
  • 181889 treeView.reveal with expand: 3 僅展開第一個三級資料夾。

感謝

最後但同樣重要的是,向 VS Code 的貢獻者們致以衷心的感謝

問題跟蹤

對我們問題跟蹤的貢獻

拉取請求

vscode 的貢獻

vscode-css-languageservice 的貢獻

vscode-js-debug 的貢獻

vscode-pull-request-github 的貢獻

monaco-editor 的貢獻

© . This site is unofficial and not affiliated with Microsoft.