2021 年 11 月 (版本 1.63)
更新 1.63.1:此更新解決了這些安全性問題。
更新 1.63.2:此更新解決了這些問題。
下載:Windows:x64 Arm64 | Mac:通用 Intel silicon | Linux:deb rpm tarball Arm snap
歡迎使用 Visual Studio Code 2021 年 11 月發行版本。此版本有許多更新,我們希望您會喜歡,其中一些主要重點包括
- 市集佈景主題預覽 - 試用色彩佈景主題,無需安裝。
- 設定問題導覽順序 - 依嚴重性或檔案位置移至下一個錯誤或警告。
- 螢幕廣播模式顯示命令名稱 - 顯示命令名稱以及鍵盤快速鍵。
- 筆記本改進 - 調整 Markdown 字型大小、更佳的檔案和 URL 連結支援。
- 不明顯 Unicode 反白 - 反白不明顯或容易混淆的 Unicode 字元。
- TypeScript 方法完成 - 快速填入介面和覆寫方法。
- 預先發行擴充功能 - 提早試用擴充功能的新功能和修正。
- 全新 Java 歡迎體驗 - 協助您在 VS Code 中設定和了解 Java。
- 適用於 vscode.dev 的更多擴充功能 - 查看適用於 Web 版 VS Code 的最新新增功能。
- 在 SSH 伺服器上的容器中工作 - 全新「遠端 - SSH」在容器中重新開啟命令。
如果您想在線上閱讀這些發行說明,請前往 code.visualstudio.com 上的更新。
觀看重點,了解 VS Code 團隊發行派對中此版本的新功能。您可以在我們的 YouTube 頻道上找到活動錄影。
Insiders: 想要盡快試用新功能嗎?您可以下載每晚建置的 Insiders 版本,並在最新更新可用時立即試用。
工作台
安裝前預覽佈景主題
您現在可以在安裝佈景主題之前,先預覽市集上可用的佈景主題。從色彩佈景主題下拉式選單 (⌘K ⌘T (Windows、Linux Ctrl+K Ctrl+T)) 中,選取 瀏覽其他色彩佈景主題 以列出市集佈景主題。當您瀏覽下拉式選單時,VS Code UI 將會預覽色彩佈景主題。
在佈景主題項目上按下 Enter 以安裝擴充功能。
設定問題導覽順序
您現在可以定義 前往下一個問題 (⌥F8 (Windows、Linux Alt+F8)) 和 前往上一個問題 (⇧⌥F8 (Windows、Linux Shift+Alt+F8)) 導覽的順序。在先前的版本中,導覽的順序是根據嚴重性,先前往錯誤,然後是警告,然後是其餘問題。新的 問題:排序順序 (problems.sortOrder
) 設定可讓您依 severity
或 position
導覽問題。當使用 "problems.sortOrder": "position"
時,第 5 行的警告會顯示在第 13 行的錯誤之前,依此類推。
多種語言特定的編輯器設定
您現在可以一次為多種語言設定語言特定的編輯器設定。以下範例示範如何在 settings.json
檔案中一起自訂 javascript
和 typescript
語言的設定
"[javascript][typescript]": {
"editor.maxTokenizationLineLength": 2500
}
自動 2x2 編輯器格線
真正的 2x2 格線編輯器版面配置只能使用 檢視:格線編輯器版面配置 (2x2) 命令。現在,您可以手動分割編輯器,直到達到 2x2 格線,即可獲得相同的版面配置,而格線將自動鎖定為真正的 2x2 版面配置。
更佳的清單逸出處理
在清單和樹狀結構上按下 Escape 現在會先將選取範圍縮小到單一元素,然後再清除。
網頁上啟用尋找功能
當 VS Code 在瀏覽器中執行時 (以下範例中的 github.dev),網頁檢視中現在支援尋找控制項
由於目前瀏覽器 API 的限制,尋找功能的行為與在桌面上略有不同。例如,在網頁上,VS Code 只能反白顯示目前的尋找結果。在桌面上,所有結果都會在目前檔案中反白顯示。
螢幕廣播模式顯示命令名稱
您現在可以選擇在螢幕廣播模式中透過鍵盤快速鍵觸發命令時顯示命令名稱。使用 螢幕廣播模式:鍵盤快速鍵格式 (screencastMode.keyboardShortcutsFormat
) 設定來設定此行為。
預先發行擴充功能
VS Code 現在支援擴充功能的預先發行版本,因此您可以選擇安裝它們並試用擴充功能的最新尖端功能。VS Code 會在擴充功能 安裝 下拉式選單中顯示額外的 安裝預先發行版本 選項,以安裝預先發行版本。
佈景主題:GitHub 淺色佈景主題
安裝完成後,指示器會清楚顯示您是否正在使用擴充功能的預先發行版本
佈景主題:GitHub 淺色佈景主題
如果擴充功能有預先發行版本,而您已安裝,您可以輕鬆切換到該版本
佈景主題:GitHub 淺色佈景主題
已更新的尋找動作
搜尋檢視中的尋找動作現在使用與編輯器中尋找動作相同的樣式
原始檔控制
在快速差異中忽略修剪空白字元
您現在可以使用 scm.diffDecorationsIgnoreTrimWhitespace
設定,設定 SCM 快速差異功能 (顯示在左側邊界中) 以忽略修剪空白字元。
筆記本
調整筆記本中的字型大小
新的 notebook.markup.fontSize
設定可讓您控制筆記本 Markdown 內容的字型大小。此設定的預設值是目前編輯器字型大小的 120%。
Markdown 儲存格中的語法反白顯示
VS Code 現在支援圍籬程式碼區塊在 Markdown 儲存格內部的語法反白顯示
筆記本中的檔案連結
筆記本內部的 Markdown 現在可以連結到目前工作區中的其他檔案
以 /
開頭的連結會相對於工作區根目錄解析。以 ./
開頭或僅以檔案名稱開頭的連結會相對於目前的筆記本解析。
裸 http(s) 連結筆記本
此外,包含 http
或 https
的 Markdown 文字現在會自動轉換為連結
這與其他筆記本轉譯器 (例如 JupyterLab) 的行為一致。
筆記本工具列標籤的動態可見性
筆記本工具列可以根據編輯器群組的寬度,決定是否應該顯示動作的標籤,方法是將 notebook.globalToolbarShowLabel
設定為 dynamic
。它會先隱藏最右側動作群組的標籤,然後再隱藏左側的標籤。如果編輯器群組在隱藏所有標籤後仍然太窄,則動作會移至溢位功能表。
notebook.globalToolbarShowLabel
的其他值現在為 always
和 never
。
編輯器
Unicode 反白顯示
來源程式碼中所有不常見的不明顯字元現在預設都會反白顯示
此外,也反白顯示可能與 ASCII 字元混淆的字元
您可以閱讀「看不見的 JavaScript 後門」部落格文章或這篇劍橋大學文章,了解如何在 Unicode 詐騙攻擊中使用不明顯或容易混淆的 Unicode 字元。
請注意,此功能無法偵測所有可能的 Unicode 詐騙攻擊,因為這取決於您的字型和地區設定。此外,模糊字元的偵測是以啟發式方式完成。為了安全起見,應使用 VS Code 的工作區信任限制模式來檢閱原始程式碼,因為在不受信任的工作區中會反白顯示所有非 ASCII 字元。
可以將設定 editor.unicodeHighlight.invisibleCharacters
、editor.unicodeHighlight.ambiguousCharacters
或 editor.unicodeHighlight.nonBasicASCII
設定為 false
以停用對應的功能。
可以使用下列設定,將個別字元排除在反白顯示之外,以及註解或文字中的字元
editor.unicodeHighlight.allowedCharacters
- 不反白顯示的特定字元清單。editor.unicodeHighlight.includeComments
- 啟用反白顯示註解中的字元。
此外,Markdown 文件預設不會反白顯示。
多個暫留提供者
當文件有多個暫留提供者時,只要其中一個提供者傳回結果,暫留就會立即顯示,並在其餘提供者的結果傳入時更新
之前 | 之後 |
---|---|
工作
automationProfile 設定
舊設定 terminal.integrated.automationShell.*
已被取代,並新增了新的 terminal.integrated.automationProfile.*
設定。這讓指定用於工作的終端機屬性 (包括 Shell、圖示、色彩和 Shell 引數) 時,具有更大的自由度。
gulpfile.ts 支援
內建的 gulp 擴充功能現在支援從 gulpfile.ts
檔案偵測工作。
NPM 腳本檢視改進
NPM 腳本檢視會顯示有關腳本的更多詳細資訊。
還有一個新的設定 npm.scriptExplorerExclude
,可讓您指定要從 NPM 腳本檢視中排除的腳本。
語言
TypeScript 4.5
VS Code 現在隨附 TypeScript 4.5。此更新帶來了許多新的語言功能,以及工具改進和錯誤修正。
您可以在 TypeScript 部落格上閱讀有關 TypeScript 4.5 的更多資訊。
方法簽名完成
方法簽名完成可讓您快速覆寫方法並實作介面方法。使用此功能時,當您在類別主體內部時,方法的建議 (例如來自父類別的方法) 在接受時會插入方法的完整簽名
如果您正在撰寫 TypeScript,接受建議也會新增簽名中參考之類型所需的所有匯入。
此功能需要在工作區中使用 TypeScript 4.5,並且可以使用 typescript.suggest.classMemberSnippets.enabled
和 javascript.suggest.classMemberSnippets.enabled
啟用/停用。
JSX 屬性完成
在 JavaScript 和 TypeScript 中完成 JSX 屬性時,VS Code 現在會自動插入屬性值
可以使用 javascript.preferences.jsxAttributeCompletionStyle
和 typescript.preferences.jsxAttributeCompletionStyle
設定這些完成的行為。
可能的設定值為
auto
- 根據屬性的類型推斷屬性樣式。字串使用attr=""
,而其他類型使用attr={}
。braces
- 永遠使用大括號。None
- 僅完成屬性名稱。
移除舊版 TS 的語意反白顯示
此更新移除了在使用 TypeScript 4.1 或更舊版本的工作區中使用語意反白顯示的支援。
TypeScript 4.2 新增了對語意反白顯示的原生支援。在舊版本中,語意反白顯示是作為 VS Code 提供的 TypeScript 語言外掛程式實作的。移除外掛程式可減少要維護和發行的程式碼量。
Markdown 預覽自訂編輯器
您現在可以使用 重新開啟方式 命令,讓 Markdown 檔案顯示為 Markdown 預覽,而不是文字
與 Markdown:開啟預覽 命令不同,重新開啟方式 不會開啟新的編輯器索引標籤,而是變更已開啟之編輯器索引標籤的顯示方式。再次使用 重新開啟方式 將檔案切換回預設文字檢視。
此外,您現在可以使用 workbench.editorAssociations
設定,將 VS Code 設定為自動將任何 Markdown 檔案開啟為預覽
"workbench.editorAssociations": {
"*.md": "vscode.markdown.preview.editor"
}
Markdown 預覽增量更新
內建的 Markdown 預覽現在在您輸入時,會更智慧地自行更新。預覽現在使用 DOM 差異,僅取代預覽文件中已變更的元素,而不是針對每次更新取代整個 Markdown 預覽文件。這減少了有時在輸入時會發生的抖動。
JSON 語言指示器
在 JSON 檔案中編輯時,現在有一個語言指示器 {}
,顯示內容是否已針對一個或多個 JSON 結構描述進行驗證。將滑鼠游標停留在指示器上方會顯示驗證狀態,以及開啟結構描述的連結。
JSON 結構描述快取
來自結構描述存放區 (json.schemastore.org) 的 JSON 結構描述現在會在本機快取。這可節省網路頻寬,並在離線工作時提供協助。
Emmet 移除標籤命令改進
當標籤在移除之前的單獨一行時,Emmet:移除標籤 命令現在會移除包含標籤的行,以及適用的多餘空白行。當要移除的標籤之間有空白行時,它也會正確地重新縮排剩餘的行。
適用於 Web 的 VS Code
Azure Repos
在此里程碑中,我們已與 Azure DevOps 工程團隊合作,在 Azure Repos 的 檔案 中心新增鍵盤快速鍵。在 檔案 中心瀏覽存放庫時,您可以按下 .
以在 https://vscode.dev 中開啟存放庫。
我們也為您的 Azure Repos 存放庫新增了一個新的進入點。您現在可以使用遠端選取器中 開啟遠端存放庫... 功能表項目下的新 從 Azure Repos 開啟存放庫... 功能表項目,從 https://vscode.dev 內連線到您的 Azure Repos 存放庫。
此外,您現在可以使用舊版 Azure DevOps URL 格式 (例如,https://<org>.visualstudio.com
) 在 vscode.dev 中開啟 Azure Repos 存放庫,方法是在 URL 前面加上 https://vscode.dev
。
已改進的遠端功能表
遠端功能表中現在會顯示三個額外的命令
- 關閉遠端工作區 - 將工作區變更為空白工作區。
- 下載 Visual Studio Code - 前往 https://vscode.dev.org.tw/download。
- 前往存放庫 - 在原始檔控制主機網站上開啟存放庫,例如 GitHub 存放庫的 https://github.com。
擴充功能的貢獻
Java
Java 擴充功能套件現在具有產品內歡迎體驗,可協助您在 VS Code 中設定和了解 Java。逐步解說涵蓋安裝 Java 執行階段和有用的架構、開啟和偵錯您的專案,以及直接在 VS Code 內部執行測試。
您也可以查看 https://vscode.dev.org.tw/docs/java 上的 Java 教學課程和使用者指南,以協助您入門。
Jupyter
效能改進
Jupyter 核心啟動 (特別是 Python
) 的效能已進行多項改進。先前開啟過筆記本的使用者在啟動核心時,將會看到 2 倍的速度提升。重新啟動 Python
核心也應該更快。
如需有關為提升效能所做變更的更多詳細資訊,您可以檢閱下列問題
- 支援預先暖機核心,以改善筆記本的啟動體驗。(<#7903>)
- 更快地啟動 Python 環境,例如 Conda。(<#8342>)
- 在啟動 jupyter 時,避免啟動預設核心。(<#8185>)
- 當我們之前找到 IPyKernel 時,避免再次尋找它。(<#8196>)
- 當啟動核心不需要 Jupyter 執行階段時,避免不必要地搜尋
Jupyter
套件。(<#8350, #8352)
處理核心失敗的改進
已新增診斷訊息和快速修正,以警告在使用 !pip install
安裝 Python 套件時。快速修正將協助使用者選擇正確的命令 %pip install
。
已進行多項改進,以在核心在執行期間無法啟動或停止時,提供更好且更有意義的錯誤訊息。錯誤現在會顯示在儲存格輸出中,並提供有關如何修正問題的指示。這可確保使用者知道問題,並且可以在錯過 VS Code 右下角顯示的錯誤時修正問題。
Python
對不受信任和虛擬工作區的有限支援
Python 擴充功能現在對不受信任的工作區 (請參閱 工作區信任) 或虛擬檔案系統 (例如,如果開啟遠端 GitHub 存放庫) 具有有限的支援。在這種情況下,僅提供部分 IntelliSense,並且擴充功能的其他功能無法使用
- 暫留、相同檔案完成以及內建函式 (例如 print) 的完成功能可用,但擴充功能僅限於處理您目前開啟的檔案。
- 對於不受信任的工作區,僅支援 Pylance 語言伺服器。
- 對於虛擬工作區,僅支援 Jedi 和 Pylance。
狀態列中的語言項目已更新,以指示這些情況
模組重新命名重構
您現在可以使用 Python 和 Pylance 擴充功能更輕鬆地重新命名模組。重新命名 Python 模組後,系統會提示您選擇是否要變更程式碼中的所有匯入和參考。如果您不確定,您可以先預覽變更的外觀,再做出決定。一旦您有信心,您可以選取 套用重構 或 捨棄重構,以避免套用建議的變更。
遠端開發
持續開發遠端開發擴充功能,可讓您使用容器、遠端電腦或 Windows Linux 子系統 (WSL) 作為功能完整的開發環境。
1.63 版中的功能重點包括
- 您現在可以在 SSH 伺服器上工作時,使用 在容器中重新開啟 命令在容器中開啟資料夾。
- 已改進的轉送連接埠安全性可避免不安全的連接埠。
- 可設定的 WSL 連線方法可讓您使用
wsl.exe
或 Socket 連線與伺服器通訊。 - 進階容器設定影片涵蓋如何變更專案的預設位置和改善 Windows 上的效能。
您可以在遠端開發發行說明中,了解新的擴充功能功能和錯誤修正。
GitHub Pull Requests and Issues
持續開發GitHub Pull Requests and Issues 擴充功能,可讓您處理、建立和管理提取要求和問題。查看擴充功能 0.34.0 版本的變更記錄,以查看重點。
擴充功能撰寫
已更新的 API 提案結構
我們已變更 API 提案的管理方式。之前,有一個包含所有提案的單一檔案 vscode.proposed.d.ts
。此檔案已變得龐大,很難判斷擴充功能正在使用哪些提案,以及特定提案是否已在穩定 API 中。現在每個提案都有一個檔案。
例如
vscode.proposed.languageStatus.d.ts
- 語言狀態項目提案。vscode.proposed.tabs.d.ts
- 編輯器索引標籤和索引標籤群組建議的 API。
每個提案都有唯一的名稱,想要使用建議的 API 的擴充功能需要在其 package.json
中列出這些名稱。package.json
中的 enableProposedApi
屬性已取代為新的 enabledApiProposals
,後者是提案名稱的字串陣列,並具有 IntelliSense 和驗證支援。
API 提案的更新流程應該如下所示
- 尋找您想要試用的提案,並將其名稱新增至
package.json#enabledApiProposals
。 - 使用最新的 vscode-dts 並執行
vscode-dts dev
。它會將對應的d.ts
檔案下載到您的工作區。 - 您現在可以針對提案進行程式設計。
詳細的移轉指南和範例移轉可以在問題 #136964 中找到。另請注意,圍繞建議 API 使用的限制並未變更。使用建議 API 的擴充功能無法發佈,也無法按原樣使用。
快速選取 API 改進
在此反覆運算中,我們正在最終確定 VS Code 中 QuickPick 的幾個 API。
QuickPickItem 內嵌按鈕
能夠提供豐富的輸入體驗是我們擴充功能 API 的目標,而使用 VS Code Quick Pick 的熟悉度可實現強大而簡單的 UI 流程。其中一個新增功能是,擴充功能現在可以將按鈕新增至個別 QuickPickItem
。
按一下按鈕會觸發 QuickPick
物件上存在的 onDidTriggerItemButton
事件。我們期待看到您如何在擴充功能中使用這些按鈕。
更新項目時能夠保留捲動位置
除了能夠將按鈕新增至 QuickPickItem
之外,您可能也希望在更新項目時保留捲動位置。對於想要執行下列動作的擴充功能來說,這是一個常見的使用案例
- 實作「從清單中移除此項目」(例如,Ctrl/Cmd + P
x
QuickPickItemButton)。 - 實作「以某種方式切換此項目」(例如「插入程式碼片段」命令)。
- 在 Quick Pick 中非同步載入項目。
從 window.createQuickPick()
傳回的 QuickPick
物件上的 keepScrollPosition
屬性可讓您控制 Quick Pick 中的捲動位置 (cursorTop
) 是否移回清單頂端。
驗證 API 改進
在此反覆運算中,我們正在最終確定 VS Code 中與驗證相關的幾個 API。
強制建立新的工作階段
有時,當您使用 authentication.getSession()
取得工作階段時,它可能對某些資源有效,但對其他資源無效,而透過再次執行登入流程,可以修正這種情況。
GitHub 單一登入安全性判斷標記語言 (SAML) 支援就是一個範例。預設情況下,為您產生的具有 repo
範圍的權杖將具有存取您自己的個人存放庫的能力。但是,如果您在已開啟 GitHub 單一登入的組織中,您必須明確授與工作階段存取該組織中存放庫的能力。
在此範例中,GitHub 驗證提供者不會知道權杖是否已針對您嘗試存取的內容正確地進行 SAML 處理,因此為了修正該行為,您現在可以強制建立新的工作階段。
AuthenticationGetSessionOptions
現在具有 forceNewSession
屬性,可讓您要求使用者再次登入。如果您將此屬性設定為 true
,使用者將會看到
如果您想要向使用者顯示更具描述性的訊息,您也可以指定具有 detail
字串的物件。
如果擴充功能具有工作階段,則以無訊息方式擷取工作階段
我們看到的常見模式是,某些擴充功能在啟動時,會檢查以查看它們是否有可用的驗證工作階段。如果有的話,它們會使用它來預先載入資料,並提前執行其他工作,以加快稍後的效能。這樣做的缺點是,如果使用者尚未授與該擴充功能存取驗證工作階段的權限,則會在帳戶功能表上顯示徽章,並在功能表中新增一個項目,要求使用者登入。
這在某些情況下很好,但在其他情況下並不理想,並且會讓使用者的畫面雜亂。為了協助解決此問題,AuthenticationGetSessionOptions
上有一個名為 silent
的新屬性,可讓您要求工作階段,而不會顯示任何擴充功能要求它的跡象。這樣一來,如果擴充功能能夠取得工作階段,它就可以執行它想要執行的動作,但如果不能,它就不會騷擾使用者。
注意:只有在擴充功能過去已被授與存取工作階段的權限 (換句話說,它是「受信任的擴充功能」) 的情況下,此 API 才會傳回已驗證的工作階段。永遠不會將使用者未同意的工作階段授與擴充功能。
設定編輯器改進
已排序的設定
現在可以使用 order
欄位排序個別設定。已排序的設定永遠位於相同類別中未排序的設定之前,且排序是相對的。
未群組的類別支援
設定也可以群組在主要擴充功能標題下,而不是特定類別下。若要執行此動作,請將其中一個類別的類別標題設定為與擴充功能顯示名稱相同。
請注意,在以下範例中,Conf > 語言:顯示大小 設定直接位於 Configuration Sample 標題下。
支援數字和整數物件
設定編輯器現在支援具有不可為 Null 的數字/整數值的物件。
executeCommand 的新類型簽名
在先前版本的 VS Code 中,vscode.commands.executeCommand
的類型設定為永遠傳回可能未定義值的 Promise
export function executeCommand<T>(command: string, ...rest: any[]): Thenable<T | undefined>;
但是,並非所有命令都可以傳回 undefined
。例如,傳回項目陣列的命令通常會傳回空陣列,而不是 undefined
(如果沒有結果)。在這些情況下,您必須使用難看的轉換或新增不必要的檢查,才能撰寫類型正確的程式碼。
為了修正此問題,我們已更新 executeCommand
的類型,使其更明確
export function executeCommand<T = unknown>(command: string, ...rest: any[]): Thenable<T>;
這表示如果命令可以傳回 undefined
,您必須明確傳入 | undefined
作為類型參數的一部分
vscode.commands.executeCommand<vscode.CallHierarchyItem | undefined>('vscode.prepareCallHierarchy', ...);
此變更僅影響 executeCommand
的類型,且不會變更此函式的行為。
更新 vscode.d.ts 以取得 exactOptionalPropertyTypes
我們已更新 vscode.d.ts
中的類型,以更好地支援 TypeScript 的 exactOptionalPropertyTypes
嚴格性選項。此工作包括
- 釐清哪些選擇性屬性可以指派
undefined
。 - 在我們如何使用
?
與| undefined
方面更加一致。
如果您正在將 exactOptionalPropertyTypes
與您的擴充功能搭配使用,如果您遇到 vscode.d.ts
類型的任何問題,請告訴我們。
來自 URI 的 HTML 自訂資料
自訂資料 允許使用者和擴充功能透過新的 HTML 標籤和屬性來擴充 HTML 語言支援。
在此版本中,HTML 自訂資料貢獻也接受文件 URI。您可以使用此功能,透過 TextDocumentContentProvider 的文件,在執行階段提供自訂資料。
組態預設值覆寫
現在,您可以透過 package.json
中的 configurationDefaults
貢獻點,覆寫其他已註冊組態的預設值。例如,以下程式碼片段會將 files.autoSave
設定的預設行為覆寫為在焦點變更時自動儲存檔案。
"configurationDefaults": {
"files.autoSave": "onFocusChange"
}
注意: 具有 application
或 machine
範圍的組態無法被覆寫。
取代輸出通道中的內容
在此里程碑中,OutputChannel
物件上的新 replace
API 可以取代輸出通道中的內容。
/**
* Replaces all output from the channel with the given value.
*
* @param value A string, falsy values will not be printed.
*/
replace(value: string): void;
workspaceContains 的逾時
當搭配 glob 模式使用 workspaceContains:
啟動事件時,VS Code 會在工作區中啟動檔案名稱搜尋,尋找符合所提供 glob 模式的檔案名稱。一旦找到符合的檔案名稱,擴充功能就會啟動。如果在 7 秒內未找到符合的檔案名稱,VS Code 現在將取消搜尋,且擴充功能將不會啟動。
發佈預先發行版本的擴充功能
VS Code 現在支援擴充功能作者透過 vsce
並傳遞 --pre-release
旗標來發佈其擴充功能的預先發行版本。這表示您可以讓選擇安裝預先發行版本的使用者可以使用最新的功能,並在正式擴充功能發佈前獲得早期回饋。
vsce publish --pre-release
VS Code Marketplace 僅支援擴充功能版本的 major.minor.patch
,且尚不支援 semver
預先發行標籤。因此,我們建議擴充功能針對發行版本使用 major.EVEN_NUMBER.patch
,針對預先發行版本使用 major.ODD_NUMBER.patch
。例如:0.2.*
用於發行版本,0.3.*
用於預先發行版本。VS Code 會自動將擴充功能更新到可用的最高版本,因此即使使用者選擇加入預先發行版本,一旦有發行版本具有更高的版本,該使用者仍將更新到發行版本。
關於預先發行版本擴充功能的更多資訊,請參閱預先發行版本擴充功能主題。
語言伺服器協定
新一代的 語言伺服器協定 以及對應的 npm 模組已發佈。除了各種次要改進之外,新版本還包含內嵌值的建議實作。
偵錯配接器協定
輸出事件的新重要類別
偵錯配接器協定的 Output
事件用於傳送 debuggee 的 stdout 和 stderr 串流,以及從偵錯工具到偵錯主控台的資訊訊息。此訊息串流對於使用者來說可能難以處理,且重要的事項可能會被忽略。因此,Output
事件新增了一個新的類別 important
,偵錯配接器可以使用它來顯示需要突出顯示且不會被使用者忽略的重要訊息。important
類別是客戶端的一個提示,用於在高可見性的 UI 中顯示重要資訊,例如彈出式通知。由於此類別是提示,因此客戶端可能會忽略提示並假設 default
類別 (console
)。
執行控制請求的澄清和改進
先前,偵錯配接器協定指定所有「執行控制」請求(continue
、next
、stepIn
、stepOut
、stepBack
、reverseContinue
)都在單一執行緒上運作,但實作可以決定忽略執行緒引數並在所有執行緒上運作。由於這種模糊的「單一執行緒」語意並非真正有用,因此偵錯配接器通常會實作更有用的功能
- 「step」請求,用於單步執行目前執行緒,同時允許其他執行緒透過恢復執行來自由運作。
- 「continue」請求,用於恢復所有執行緒。
由於目前的規格對於執行控制請求來說不切實際,我們已變更所有執行控制請求(continue
、next
、stepIn
、stepOut
、stepBack
、reverseContinue
)的規格,使其符合通常的實作方式。
此外,某些偵錯配接器需要一種「替代語意」,其中 step
或 continue
僅在目前執行緒上運作,但將所有其他執行緒保持在暫停狀態。對於此「替代行為」,已在所有執行控制請求中新增一個新的選用 singleThread
屬性。偵錯配接器必須使用對應的新功能 supportsSingleThreadExecutionRequests
來向客戶端指示執行控制請求支援 singleThread
屬性。
建議的擴充功能 API
每個里程碑都附帶新的建議 API,擴充功能作者可以試用。與往常一樣,我們希望收到您的回饋。以下是試用建議 API 的步驟
- 尋找您想要試用的提案,並將其名稱新增至
package.json#enabledApiProposals
。 - 使用最新的 vscode-dts 並執行
vscode-dts dev
。它會將對應的d.ts
檔案下載到您的工作區。 - 您現在可以針對提案進行程式設計。
您無法發佈使用建議 API 的擴充功能。下一個版本中可能會出現重大變更,而且我們絕不希望破壞現有的擴充功能。
QuickPickItem 分隔符號
在此迭代中,我們引入了擴充功能透過建議 API (vscode.proposed.quickPickSeparators.d.ts
) 將分隔符號(也稱為「類別」)新增至 Quick Pick 的功能。這對於將項目分組或僅在項目之間留出一些空間非常有用
若要將分隔符號新增至現有的 Quick Pick,您可以將新的 QuickPickItem
新增至現有的項目清單,但請指定 QuickPickItem
上的 kind
屬性,並將其設定為 QuickPickItemKind.Separator
。
在上面的範例中,您會將以下物件新增至您的項目清單
{
label: 'APIs',
kind: QuickPickItemKind.Separator
}
如果您未指定 kind
屬性,或將其設定為 QuickPickItemKind.Default
,則該項目將被視為一般的 QuickPickItem
。
您可以在issue #74967 中提供關於此 API 的回饋。
值得注意的修正
- 5989 無法在使用 openssh 的遠端 Windows 機器上執行任何工作
- 45629 Mac 上的 Google 日文輸入法 (IME) - 建議與文字重疊
- 131345 具有
\n
的預設設定棄用警告會破壞 json - 133521 要求安裝 nvm,即使它已經安裝了
- 133623 如果焦點執行緒不再存在,偵錯工具列不會更新
- 134254 無法輸入韓文。自我分割或遺失
- 134429 Zlib 錯誤:無效距離太遠
- 135838 當有另一個名稱更長的檔案時,我無法儲存檔案
- 136684 呼叫堆疊項目未以正確的內容開啟索引標籤
- 137012 Emmet 在 VS Code 1.62.2(Universal) 的 js/jsx 檔案中無法運作
- 138153 效能:_removePropertiesWithPossibleUserInfo 約佔載入渲染器成本的 10%
- 138302 效能:僅在註冊擴充功能後更新編輯器組態
- 138517 vscode.dev 無法在私人儲存庫中切換分支
感謝您
最後但同樣重要的是,衷心感謝 VS Code 的貢獻者。
Web 擴充功能
擴充功能作者啟用以 Web 擴充功能 形式執行程式碼的擴充功能 (以下列表介於 11 月 2 日至 12 月 6 日之間)
- Material Icon Theme (lit fork) (abschill)
- Base64 Utils (Adrientoub)
- LS-Club (AdvantiSS)
- Apollo Workbench (Apollo GraphQL)
- A-SOUL 鼓勵師 (AS042971)
- Django (Baptiste Darthenay)
- TOML Language Support (be5invis)
- Simple React Snippets (Burke Holland)
- MASM/TASM (clcxsrolau)
- Tree (CTC)
- Tree (Insiders) (CTC)
- Structured Data Templates (Daniel G. Taylor)
- Notepad Notebook (Devon7925)
- Of course I still log you (Diego Perez)
- Hello, DotNetJS! (Elringus)
- Excel Viewer (GrapeCity)
- FTL XML (hahn-kev)
- ECL Language (HPCC Systems)
- Graphviz Previewer Web (IJMacD)
- ImJoy (ImJoy Team)
- InterSystems ObjectScript (InterSystems Developer Community)
- Shader Toy (Web) (Jackson Kearl)
- Dark Light (Jakka Prihatna)
- React Native Mockups Explorer (jamsch)
- Quote List (jmviz)
- Vue Language Features (Volar) (Johnson Chu)
- Code Runner for Web (Jun Han)
- GZDoom ZScript (kaptainmicila)
- nginx.conf hint (Liu Yue)
- Loadmill (Loadmill)
- UUID Generator (ludwhe)
- CSS Formatter (Martin Aeschlimann)
- SnowScript JS (Mauricio Rojas)
- HLASM Browser dev (mbali)
- Template String Converter (meganrogge)
- Micro Focus COBOL (Micro Focus)
- Micro Focus Enterprise (Micro Focus)
- Cursor Align (Mike Moore)
- Cursor Trim (Mike Moore)
- Multi-Cursor Search (Mike Moore)
- numeric (neal.bkn)
- Toast (Nick Bradley)
- steris (numso)
- N/A (Orta)
- Wurst language support (peterzeller)
- ShowFlags (PEW's Corner)
- Folder Archiver (Philip Damianik)
- ZIP archive type (Philip Damianik)
- Open In Webview Web Extension (Project μ)
- Replace On (rioj7)
- Select By (rioj7)
- Powercursor (Rishov Sarkar)
- BrightScript Language (RokuCommunity)
- Script Assets (Saige)
- LinkMe (saswatbh)
- Drawing Editor (Seflless)
- Azure ML Remote Web (sevillal)
- vscode-cml (sevillal)
- Reflow Paragraph (Stephen Sigwart)
- Neon Dark Theme (Sudhan)
- Japanese Word Handler (Suguru Yamamoto)
- tldraw (tldraw)
- vscodevim-sneak-fork (vscodevim-sneak-fork)
- Expression2-LS (Vurv78)
- Weigl WEM | Script (Weigl Control LLC)
- GreyScript (WyattL)
- mplstyle (Matplotlib) (yy0931)
- OverPy (Zezombye)
- COBOL Folding (zokugun)
- Explicit Folding (zokugun)
- Zokugun Themes (zokugun)
Issue tracking
對我們的 issue tracking 的貢獻
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- CodeCrazy-ywt (@CodeCrazy-ywt)
- Simon Chan (@yume-chan)
- ArturoDent (@ArturoDent)
- Lemmingh (@Lemmingh)
Pull requests
對 vscode
的貢獻
- @adaex (Aex): 更新至最新的 seti-ui 圖示主題 PR #136375
- @alex-brs: build/npm/preinstall: 修復 node 版本的錯誤訊息 PR #136794
- @filiptronicek (Filip Troníček): 將引數
connectionToken
重新命名為connection-token
PR #136620 - @gjsjohnmurray (John Murray)
- 在 QuickDiff 準備時,將進度指示器新增至活動列中的 SCM PR #136969
- 設定描述中遺漏單字 (修復 #137027) PR #137028
- 避免來自帳戶的靜音登入中發生衝突的範圍和 commandId (修復 #137601) PR #137613
- @grandeljay (Jay): 從 PHP 陳述式中移除括號 PR #137447
- @Gvozd (Gvozd): 133348 修復在編輯器中開啟搜尋時發生的 oom PR #136554
- @jeanp413 (Jean Pierre)
- 修復遠端終端機錯誤:找不到命令 $setUnicodeVersion PR #136171
- 修復遠端終端機標題在重新載入時未還原的問題 PR #136176
- 修復錯誤:重新命名終端機索引標籤時無法執行遞迴拼接 PR #136177
- 修復手動建置 vscode 伺服器時遺失檔案的問題 PR #137570
- @jherchen (Johannes Herchen): 修復 preinstall 指令碼 PR #136638
- @JustinGrote (Justin Grote): 更正 booleanRegex 以正確地僅比對 'true' 和 'false' PR #137822
- @jzyrobert (Robert Jin): 更新 html-language-features 文件和 tasks 以使用 yarn PR #136543
- @laurentlb (Laurent Le Brun): 將 'expandLineSelection' 設為適當的動作。 PR #135917
- @MalikIdreesHasanKhan (Malik Idrees Hasan Khan): 修復錯字。 PR #135729
- @mamphis (Mattis Wacker): 修復遺失的活動偵錯行 + 中斷點符號 PR #137471
- @mkantor (Matt Kantor): 修復文件註解中的一些錯字 PR #137810
- @orange4glace: #fix: 108459 PR #108666
- @parched (James Duley): 修復工作組態錯誤訊息中的文法錯誤。 PR #137898
- @pdrgds (Pedro Guedes): 修復 #131458 PR #136625
- @PEZ (Peter Strömberg)
- 新增選項:在螢幕錄影覆疊中包含命令 PR #126742
- 遵循設定僅顯示快速鍵 PR #136251
- @pohzipohzi (Zi How Poh): 新增跳至下一個/上一個問題的選項 PR #135736
- @Pranomvignesh (Pranom Vignesh): 修復按鍵繫結標題 PR #123071
- @rudavko (Andrii): 透過使用現有的 utils 函式來移除程式碼重複 PR #137016
- @RyanAfrish7 (Afrish Khan S): 將 markdown 中的 img hrefs 從 file 變更為 vscode-file PR #136687
- @SeriousBug (Kaan Genç): 允許擴充功能停用內建 markdown 預覽按鈕 PR #136273
- @sijakret: html-language-features: text document provider 支援 customData.html PR #137557
- @smcenlly (Simon McEnlly): output channel: 新的 replaceAll API 以改進輸出通道渲染 PR #136402
- @suzmue (Suzy Mueller): 如果焦點執行緒不存在,則清除焦點執行緒 PR #133637
對 vscode-codicons
的貢獻
- @Profesor08: 新增
newline
圖示 PR #91
對 vscode-css-languageservice
的貢獻
- @avigoldman (Avi Goldman): 尊重
kind
屬性 PR #254
對 vscode-eslint
的貢獻
- @asingh04 (Abhishek Singh): 處理預先存在的停用規則註解 PR #1261
對 vscode-extension-samples
的貢獻
對 vscode-html-languageservice
的貢獻
- @gustavnikolaj (Gustav Nikolaj): 在所有 src 和 href 屬性中觸發完成 PR #117
- @jzyrobert (Robert Jin): 為屬性標籤新增自動完成 PR #116
對 vscode-json-languageservice
的貢獻
- @gjsjohnmurray (John Murray): 驗證 hostname、ipv4 和 ipv6 格式 (#_100) PR #118
- @mati-o (Mati O): 修復 $ref 到 $id PR #107
- @Relequestual (Ben Hutton): 說明尚不支援 JSON Schema draft 2020-12 PR #117
對 vscode-languageserver-node
的貢獻
- @CodingDoll: 正確的 engines 欄位 node 14+ PR #862
- @fvclaus: 當未定義範圍時,SymbolInformation 的位置遺失 PR #849
- @hamirmahal (Hamir Mahal)
- @robertoaloi (Roberto Aloi): 修正錯誤訊息中的錯字 PR #866
對 vscode-pull-request-github
的貢獻
- @38elements (38elements)
- @burkeholland (Burke Holland): 開啟 gist 儲存庫時發生提取錯誤 PR #2933
- @emtei (Mateusz Stopka): 請勿為已關閉或已合併的 PR 啟用審閱模式 PR #3021
- @taisph (Tais P. Hansen): 修正產生的分支名稱在 bash 中需要引號的問題 PR #3084
對 vscode-vsce
的貢獻
- @microhobby (Matheus Castello): 將
libsecret
新增至Dockerfile
並在README
中提及此相依性 PR #646
對 language-server-protocol
的貢獻
- @doriath (Tomasz Zurkowski): 釐清重新命名請求的回應。 PR #616
- @yxrkt: ResponseMessage.result 可以是陣列類型 PR #1012
對 monaco-editor
的貢獻
- @activeguild (j1ngzoue): 新增 'browser-ems-vite-react' 範例 PR #2767
- @emojiiii (C.Y.Kun): 修正網站遊樂場上的一些錯誤 PR #2779
- @MasterOdin (Matthew Peveler)
- @milahu: 修正 monaco.d.ts 的連結 PR #2769
- @Pranomvignesh (Pranom Vignesh): Semantic Tokens Provider 範例在文件中損壞 PR #2764
- @rramo012 (Rafael Ramos): 修正文件連結 PR #2748