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

2023 年 5 月(版本 1.79)

更新 1.79.1:此更新解決了此安全問題

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

下載:Windows:x64 Arm64 | Mac:通用 Intel Apple 晶片 | 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.autoSaveeditor.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 53SGR 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 整合

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

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

相似度閾值

Git 狀態使用相似度索引(與檔案大小相比的新增/刪除數量)來確定新增/刪除對是否被視為重新命名。您現在可以使用 git.similarityThreshold 設定配置相似度閾值,該設定接受 0100 之間的值。預設值為 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.renameMatchingJsxTagstypescript.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 文件匹配的 glob 對映到影像目標。影像目標也可以使用一些簡單的變數。有關可用變數的資訊,請參閱 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 的檔案,並嘗試將其貼上到工作區中已存在 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 (JSONL) 檔案的語法高亮

帶行的 JSON 描述了由換行符分隔的 JSON 物件序列。如果使用副檔名 jsonl,VS Code 會提供語法高亮。

遠端開發

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

亮點包括:

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

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

對擴充套件的貢獻

GitHub Copilot

在穩定版 VS Code 中使用 Copilot Chat

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

編輯器聊天

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

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

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

筆記本改進

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

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

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

GitHub 拉取請求和問題整合

當安裝並啟用了 GitHub 拉取請求和問題擴充套件並且您正在檢視審閱執行緒時,現在可以使用 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”命令在編輯器中開啟聊天會話,但現在也可以在側邊欄和編輯器之間來回移動聊天會話。您可以在聊天檢視標題或編輯器標題選單中的“...”選單下找到“Open Session in Editor”和“Open Session in Sidebar”命令。

聊天會話歷史記錄

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

將聊天會話匯出到 JSON 檔案

我們添加了一個命令聊天:匯出會話,它將當前聚焦的聊天會話匯出到 JSON 檔案。然後,您可以執行聊天:匯入會話命令來匯入此會話並繼續您的對話。您可以將此檔案簽入您的儲存庫,與他人共享,或者只是儲存您的對話以供以後參考。請注意,當您在匯入的聊天會話中繼續對話時,除非您再次匯出該會話,否則這些新訊息將不會儲存。

程式碼塊導航和按鍵繫結

我們添加了一些命令和按鍵繫結,使在聊天回覆中使用程式碼塊變得更容易。聊天:下一個程式碼塊 (⌥⌘PageDown (Windows, Linux Ctrl+Alt+PageDown)) 和聊天:上一個程式碼塊 (⌥⌘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: 在終端中執行 Python 檔案命令執行的檔案建立一個新終端,並且每次重新執行該檔案時都將繼續使用該檔案的“專用”終端。

任何時候您希望在單獨的終端中執行相同的檔案,您都可以在執行按鈕選單下選擇Python: 在專用終端中執行 Python 檔案

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 擴充套件現在支援恢復對 遠端 Jupyter 核心的單元格執行,如果單元格仍在忙於執行,即使在關閉 VS Code 後重新開啟筆記本也是如此。

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

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

Resuming notebook cell execution after closing and reopening VS Code

GitHub 拉取請求和議題

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

  • 兩個用於檢視已簽出 PR 差異的新操作:將基礎與拉取請求頭進行比較(只讀)將拉取請求頭與本地進行比較
  • 新設定 "githubPullRequests.pullPullRequestBranchBeforeCheckout" 可用於在再次簽出相同的 PR 分支時關閉拉取先前已簽出的 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 儲存庫擴充套件開啟的 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 儲存庫下載並 cat 一個 .six 示例檔案

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 專案中所有檔案的列表。您可以開始鍵入以快速找到所需的檔案。

或者,您可以使用選擇現有檔案... 透過普通檔案選擇器選擇檔案,或者使用輸入新檔案路徑... 指定要建立的新檔案。

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

WebAssembly 在 VS Code for the Web 中

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

擴充套件創作

改進了 vscode.fs 對本地檔案的效能

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

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

更嚴格的狀態列 API

用於建立狀態列項 createStatusBarItem 的 API 允許擴充套件傳遞一個識別符號。此識別符號用於控制狀態列項的隱藏和顯示。識別符號應在擴充套件中是唯一的,但直到現在才強制執行此操作。在此版本中,我們對此進行了更嚴格的限制,由同一擴充套件建立的具有相同識別符號的狀態列項現在將合併為一個。

任務

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

提議的 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

此提案添加了可以提供給 EnvironmentVariableMutator 的選項,允許您精確指定何時應用環境變數更改,無論是在程序建立時還是在 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。無標題檔案將始終要求使用者提供目標,除非已關聯路徑。

Authentication authGetSessions 提案 API

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

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

要使其在 GitHub 身份驗證擴充套件中可供採用,還需要更多工作,因此如果您感興趣,可以關注並在此提案跟蹤問題中提供反饋

視窗活動 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 遷移到程序沙盒部落格文章以獲取更多詳細資訊。

擴充套件主機重啟參與

Workbench 中的某些操作可能導致擴充套件主機重啟而無需重新載入當前視窗。例如,當您切換配置檔案時,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 中建立的每月里程碑將作為所有其他建立和維護的里程碑的基礎。

微軟 Build 大會上的 VS Code

如果您沒有機會觀看 Microsoft Build 2023 直播,可以在 Microsoft Developer YouTube 頻道上觀看主題演講和會話。

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

值得注意的修復

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

感謝

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

問題跟蹤

對我們問題跟蹤的貢獻

拉取請求

vscode 的貢獻

vscode-css-languageservice 的貢獻

vscode-js-debug 的貢獻

vscode-pull-request-github 的貢獻

monaco-editor 的貢獻