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 月版本。此版本中有許多更新,希望您會喜歡,其中一些主要亮點包括
- 只讀模式 - 將工作區中的特定檔案和資料夾標記為只讀。
- “貼上為”選項 - 選擇將專案連結貼上到編輯器中的方式。
- 自動複製外部檔案 - 拖動或貼上到 Markdown 會將新檔案新增到工作區。
- 預設 Git 儲存庫分支名稱 - 使用“main”作為預設值或透過使用者設定覆蓋。
- 筆記本富內容搜尋 - 基於筆記本輸出搜尋或按單元格型別篩選。
- JSX 標籤的連結編輯 - 同時更改 JSX 的開始和結束標籤。
- 預覽:GitHub Copilot Chat 改進 - 輕鬆管理您的聊天會話歷史記錄。行內聊天“即時預覽”。
- Microsoft Build 2023 上的 VS Code - 在 YouTube 播放列表中觀看會話。
如果您想線上閱讀這些發行說明,請訪問 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
。
工作臺
只讀模式
在某些開發場景中,明確將工作區中的某些資料夾或檔案標記為只讀會很有幫助。例如,如果資料夾或檔案內容由其他程序管理(例如由 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
設定並在您選中複選框時新增主機。
此外,單擊瞭解更多按鈕不再關閉對話方塊。
新的 security.restrictUNCAccess 設定
新的設定 security.restrictUNCAccess
允許您停用主機的 UNC 允許列表,並將行為恢復到此安全修復之前的狀態。我們強烈建議不要更改此設定,因為它會使您的系統再次容易受到資訊洩露漏洞的攻擊。
新選項卡大小選項已修復
workbench.editor.tabSizing
設定有一個新選項 fixed
,它使每個選項卡寬度相等。當空間變得有限時,選項卡將同等縮小到最小值。新設定 workbench.editor.tabSizingFixedMaxWidth
設定選項卡的初始大小。
在此模式下,當您使用滑鼠快速關閉選項卡時,選項卡的寬度保持穩定,以便透過單擊同一點來關閉每個選項卡。當您將滑鼠從編輯器選項卡區域移開時,寬度會隨之調整。
網路質量指示
當您連線到遠端計算機時,VS Code 遠端編輯功能的最佳體驗需要良好的網路連線和低延遲。在此里程碑中,我們更新了狀態列中的遠端指示器,以便在延遲非常高或網路連線似乎離線時為您提供一些反饋。
高延遲(Web、桌面)
我們會定期測量您連線到的遠端裝置的延遲。當達到某個閾值時,遠端指示器會更新以反映這一點。
離線檢測(僅限 Web)
如果您使用 Web 瀏覽器連線到遠端裝置,並且突然失去網際網路連線,遠端指示器會更新以反映這一點。
繼續工作
繼續工作功能允許您在同一儲存庫的 VS Code 開發環境之間儲存和檢索工作更改,例如,當您從本地 Git 儲存庫升級到 GitHub codespace,或在同一儲存庫的不同計算機之間切換時。
現在,您可以傳輸 GitHub 儲存庫的開發環境之間的工作更改,即使它在一個環境中配置了 HTTP 遠端,在另一個環境中配置了 SSH 遠端。此外,我們已開始傳輸額外的 Workbench 狀態,例如您的原始碼管理檢視狀態首選項,以實現更無縫的過渡。
編輯器
貼上為
將檔案貼上到文字編輯器中時,您可能希望以多種方式插入它。您可能需要一個指向該檔案的絕對路徑。您可能需要一個相對於當前工作區的路徑。或者,您甚至可能需要特定於當前編輯器語言的內容,例如在貼上到 Markdown 中時插入 Markdown 連結到檔案。VS Code 的新“貼上為”功能使您可以控制貼上內容的插入方式。
粘貼後,如果貼上內容可以以其他方式插入,VS Code 現在會顯示一個小的“貼上為”控制元件
您可以透過單擊或使用⌘. (Windows, Linux Ctrl+.) 鍵盤快捷鍵開啟“貼上為”控制元件。一旦您開始輸入或將游標移到插入文字之外,貼上選擇器就會消失。您還可以使用 "editor.pasteAs.showPasteSelector": "never"
完全停用刪除選擇器控制元件。
例如,當您將內容貼上到筆記本中的 Markdown 單元格時,“貼上為”控制元件允許您在以下選項之間切換
- 將影像作為附件插入
- 插入 Markdown 影像引用
- 插入相對路徑(對於工作區中的檔案)
- 插入絕對路徑
如果您更喜歡在實際貼上之前選擇應如何貼上剪貼簿中的內容,則可以使用新的貼上為... 命令。這使您可以選擇應如何貼上內容
快速建議和程式碼片段
快速建議意味著 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 才能使其工作。
上劃線支援
終端現在支援 ECMA-48 中指定的上劃線轉義序列(SGR 53
、SGR 55
)。此序列最常見的用途是在終端底部的應用程式“狀態列”上方新增一條線。
原始碼管理
預設分支名稱
從這個里程碑開始,所有使用 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
設定配置相似度閾值,該設定接受 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 現在會顯示所有缺失引數的建議
這可以幫助您快速填寫文件。
在 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 標籤中使用的檔案路徑。這包括對以下功能的支援
- 路徑補全.
- 查詢連結到檔案的所有引用。
- 在檔案移動或重新命名時自動更新檔案路徑。
- 使用 F2 安全重新命名檔案。
- 驗證連結到的檔案是否存在於工作區中。
將音訊插入 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 時,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 圖示刪除聊天請求/響應對。
為什麼您會想這樣做?有時,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 檔案。
測試發現和執行重寫
本月,我們開始將測試重寫作為一項實驗推出。此重寫重新設計了擴充套件中 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、影像等。不支援恢復小部件和其他此類複雜輸出的狀態。
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
的所有引用。
這些新的 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 支援!
終端中的影像
現在實驗性支援終端中的影像。終端中的影像通常透過將影像畫素資料編碼為文字來工作,然後透過特殊的轉義序列寫入終端。目前支援的協議是 sixel 和 iTerm 首創的內聯影像協議。
透過設定啟用此功能
"terminal.integrated.experimentalImageSupport": true
啟用後,要測試它,您可以從 libsixel 儲存庫下載並 cat
一個 .six
示例檔案
或者使用 imgcat python 包或 imgcat 指令碼處理 png、gif 或 jpg 檔案
此功能的當前限制是
- 序列化不起作用,因此重新載入終端不會保留任何影像(在 jerch/xterm-addon-image#47 中跟蹤)。
- 將選擇複製為 HTML 不包括所選影像(在 jerch/xterm-addon-image#50 中跟蹤)。
- GIF 動畫不起作用(在 jerch/xterm-addon-image#51 中跟蹤)。
- 比單元格短的影像將無法正常工作,這是序列的設計缺陷,也發生在 XTerm 中。
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 的步驟
- 查詢您要嘗試的提議並將其名稱新增到
package.json#enabledApiProposals
。 - 使用最新的 @vscode/dts 並執行
npx @vscode/dts dev
。它會將相應的d.ts
檔案下載到您的工作區。 - 您現在可以根據該提議進行程式設計。
您不能釋出使用提議 API 的擴充套件。下個版本中可能會有破壞性更改,我們絕不希望破壞現有擴充套件。
EnvironmentVariableCollection.description
此提案允許為 EnvironmentVariableCollection
指定描述,在終端選項卡懸停時向用戶顯示,解釋更改具體在做什麼。
// Example of what the Git extension could use
context.environmentVariableCollection.description = 'Enables a Git authentication provider';
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 使用者特別感興趣的一些會話包括
- Microsoft Cloud 為開發人員帶來下一代 AI
- 使用 Visual Studio Code 隨時隨地進行開發
- 充分利用 GitHub Copilot 的實用技巧
- 將雲和 AI 的力量注入您的開發工作流
值得注意的修復
- 165933 [emmet] 2023 年的 http-equiv="X-UA-Compatible"
- 181889 treeView.reveal 和 expand: 3 只展開第一個級別 3 的資料夾
感謝
最後但同樣重要的是,向 VS Code 的貢獻者們致以衷心的感謝。
問題跟蹤
對我們問題跟蹤的貢獻
- @gjsjohnmurray (John Murray)
- @starball5 (starball)
- @IllusionMH (Andrii Dieiev)
- @tamuratak (Takashi Tamura)
拉取請求
對 vscode
的貢獻
- @akbyrd (Adam Byrd):修復 msCompile 問題匹配器的問題 PR #182167
- @ashgti (John Harrison):修復除錯輸出提示不顯示為“object Object”的問題 PR #181964
- @benibenj (Benjamin Simmonds):TreeView 複選框狀態設為 0 已修復 PR #183342
- @bitekas (Viktor Korsun):修復 Pseudoterminal onDidClose 示例 PR #180026
- @dan-petty (Daniel Petty):修復無法為 Windows 上的內建配置檔案指定自定義路徑的問題 PR #175464
- @dcourv (Dylan):修復 #181207 - 為擴充套件檢視器底部新增填充 PR #181723
- @DoctorKrolic:新增
JSON Lines
語言定義 PR #183035 - @dyedgreen (Tilman Roeder):修復:開啟資料夾或工作區時將路徑編碼為 URI 元件 PR #182398
- @ElectricRCAircraftGuy (Gabriel Staples):所有顏色主題:也將註釋文件字串視為註釋 PR #182162
- @gjsjohnmurray (John Murray)
- 修復
security.restrictUNCAccess
設定描述中的拼寫錯誤 PR #182842 - 防止路徑沒有父級時工作區資料夾選擇器中的重複文字(修復 #183418) PR #183427
- 修復
- @hermannloose (Hermann Loose)
- 為已解決和未解決的註釋新增單獨的概覽尺顏色 PR #181520
- 修復註釋圖示的顏色描述 PR #181628
- @iAnujParajuli (Anuj Parajuli):為音訊檔案新增 #181652 html 音訊標籤 PR #183328
- @jacekkopecky (Jacek Kopecký)
- 為固定寬度選項卡新增設定 PR #181729
- 固定選項卡大小:關閉最後一個選項卡時恢復選項卡寬度 PR #183188
- @jackpunt (Ganesh)
- 新增一個設定以將檔案標記為只讀 (nonEditable)PR #161716
- #181708 的 isReadonly() 優先順序 PR #181955
- @jairbubbles (Julien Richard):修復差異行內模式下已刪除行的上下文選單 PR #182542
- @jeanp413 (Jean Pierre)
- 修復 ITerminalService#getActiveOrCreateInstance 返回已處置的終端 PR #180451
- 修復重新載入後終端編輯器為空的問題 PR #182121
- 修復終端不考慮編輯器背景顏色的問題 PR #182557
- 修復改進終端查詢行為,當結果超過 1000 個時 PR #182917
- 修復按下
esc
鍵時無法隱藏終端查詢小部件的問題 PR #183090 - 修復終端不再持久化的問題 PR #183516
- @Juneezee (Eng Zer Jun):重構(userDataSync):將
indexOf
替換為includes
PR #182635 - @markw65
- 修復任務啟動競爭 PR #180546
- 使 _activeTasks 與 _executeTask 同步 PR #180617
- @max06 (Flo):修復:shellIntegration 中將 bash-syntax 更改為 fish-syntax PR #181637
- @r3m0t (Tomer Chachamu)
- 互動式視窗 - 不為插入工具欄留出空間 PR #181949
- 防止內聯提示和編輯器內容之間的連字(修復 #170449) PR #182379
- @rehmsen (Ole):為偵錯程式步進新增 F10 鍵繫結,即使在 Web 上。 PR #183510
- @soulshined (David Freer):PHP 片段生活質量和連續性 PR #174889
- @TheSylvester (Sylvester Wong):添加了使用程式碼片段主體作為描述(如果未提供)#181115 PR #181381
- @tisilent (xie jialong 努力鴨)
- 修改 innerWidth PR #180480
- 修復貢獻的配置檔案圖示 PR #182615
- 修復 #182702 PR #182705
- @ugultopu (Utku Gultopu):為 Git 擴充套件新增相似度閾值選項 PR #178266
- @vadimcn:在工作區狀態中保留斷點 ID PR #182704
- @Viijay-Kr (Vijaya Krishna):修復:#169151 如果沒有斷點,則回退到編輯器懸停 PR #181274
- @Yash-Singh1 (Yash Singh):功能:.vuerc 作為 json 檔案 PR #153017
- @yshaojun:修復:透過新增 unbalancedBracketScopes(#_168110) 修復 perl 括號對 PR #181203
對 vscode-css-languageservice
的貢獻
- @romainmenke (Romain Menke):css 巢狀:增加支援 PR #345
對 vscode-js-debug
的貢獻
- @NotAndOr (notandor):啟動瀏覽器時指定 user-data-dir 引數,無需目錄連線。 PR #1656
對 vscode-pull-request-github
的貢獻
- @kabel (Kevin Abel):簡化
AuthProvider
列舉 PR #4779 - @SKPG-Tech (Salvijus K.):新增模板中缺失的索引 PR #4822
- @unknovvn (Andzej Korovacki):在 checkoutExistingPullRequestBranch 中使用 git setting 在簽出前獲取 PR #4759
對 monaco-editor
的貢獻
- @dlitsman (Dmitry Litsman):擴充套件“在邊距中渲染字形”示例以包含透明顏色註釋。 PR #3945
- @dneto0 (David Neto):避免 WGSL 詞法分析器中的一個 hack PR #3887
- @spahnke (Sebastian Pahnke)
- @titouanmathis (Titouan Mathis):Webpack 外掛修復 CJS 被注入 ESM 檔案的問題 PR #3933