🚀 在 VS Code 中

2023 年 9 月 (版本 1.83)

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

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


歡迎使用 Visual Studio Code 2023 年 9 月發行版本。此版本包含許多更新,我們希望您會喜歡,其中一些重點包括

如果您想在線上閱讀這些版本資訊,請前往 Updates 上的 code.visualstudio.com

Insiders: 想要盡快試用新功能嗎?您可以下載每晚建置的 Insiders 版本,並在最新更新可用時立即試用。

協助工具

GitHub 提取請求和問題註解改進

允許您處理、建立和管理提取請求和問題的 GitHub Pull Requests and Issues 擴充功能,在此迭代中針對註解和檢閱體驗進行了許多協助工具改進。

當螢幕閱讀器使用者開啟編輯器時,如果編輯器包含註解範圍,則會通知使用者。新的協助工具說明對話方塊 (editor.action.accessibilityHelp) 提供在註解執行緒和範圍之間導覽的命令深入解析。

此外,註解控制項現在可存取。協助工具說明對話方塊 (editor.action.accessibilityHelp) 也可在該內容中使用,以告知使用者預期會發生什麼以及如何使用此功能。還有新的命令註解:前往下一個註解範圍 (⌘K ⌥⌘↓ (Windows, Linux Ctrl+K Ctrl+Alt+Down)) 和註解:前往上一個註解範圍 (⌘K ⌥⌘↑ (Windows, Linux Ctrl+K Ctrl+Alt+Up)) 用於在註解範圍之間導覽。

工作台

命令面板中類似的命令結果

尋找您要尋找的命令可能具有挑戰性。僅在 VS Code 中就有超過 2000 個命令... 加上您最愛的擴充功能,這個數字可能會更高。我們想要引入一種方法來協助您找到您要尋找的內容,同時仍然保持命令面板今天提供的速度。為此,我們在命令面板結果中加入一個名為「類似命令」的新區段。以下是一些範例

查詢不再需要「模糊」比對才能顯示在結果中。例如「切換自動儲存」

'turn on auto save' and 'Toggle Auto Save' showed up in a similar results section

如果存在模糊結果,這些結果仍然會顯示在頂端,而類似命令會接續顯示

user searched for 'change language' and 'Configure Display Language' showed up in a similar results section

擴充功能貢獻的命令也會被擷取

user searched for 'show git blame' and 'toggle file blame' showed up in a similar results section

我們認為這真的會對那些難以記住確切命令名稱的人有所幫助... 讓我們誠實一點,這幾乎是我們所有人在某些時候都會遇到的情況。

這只是此新功能的初步版本,仍然需要比對命令名稱中的確切字詞。在未來,您可以預期會有諸如此類的改進

  • 根據命令的非可見描述比對的命令。
  • 更佳的基本同義詞處理 (「切換」和「開啟/關閉」、「顯示」和「顯示」等等)

請告訴我們您的想法!

設定檔的圖示

您現在可以將圖示與設定檔建立關聯。此圖示將顯示在活動列中,取代管理齒輪圖示。如果您有多個設定檔,且想要快速識別目前作用中的設定檔,這會很有用。

下圖顯示建立新設定檔時的圖示選取對話方塊。

Icon selection dialog

然後,作用中的設定檔圖示會顯示在活動列中。

Active profile icon in the Activity bar

編輯器索引標籤高度密度

window.density.editorTabHeight 設定允許使用者將索引標籤高度縮減為更精簡的大小。

預設編輯器索引標籤高度

Editor tabs with default height

精簡編輯器索引標籤高度

Editor tabs with compact height

釘選編輯器索引標籤位於個別列

已新增新的設定 workbench.editor.pinnedTabsOnSeparateRow。啟用後,釘選的索引標籤會顯示在其他索引標籤上方的個別列中。當在索引標籤列之間拖曳時,編輯器索引標籤會自動釘選或取消釘選。

Moving editor tabs between the two tab rows

設定編輯器搜尋調整

設定編輯器現在針對給定的搜尋查詢顯示較少的結果,以減少雜訊。如果您已安裝 GitHub Copilot Chat 擴充功能,除了透過關鍵字比對找到的設定之外,只會選擇前五個 Copilot Chat 設定比對,而不是前十五個。

搜尋結果現在也會依設定編輯器目錄排序,以在頂端顯示常用設定,並依原始順序顯示篩選後的擴充功能設定。若要還原為依比對類型和分數排序搜尋結果,請將 workbench.settings.settingsSearchTocBehavior 設定設定為 "hide",清除搜尋查詢,然後開始另一個搜尋。

Searching "default formatter" in the Settings editor results in the editor.defaultFormatter setting appearing at the top.

佈景主題:淺粉紅色 (在 vscode.dev 上預覽)

改進編輯器動作的溢位行為

當編輯器動作的數量超過可用空間時,動作會溢位到 ... 更多動作功能表。此邏輯已改進,並且現在會排除一些重要動作,例如關閉分割編輯器。這表示即使可用空間有限,它們也將永遠可見。

色彩佈景主題選取器現在顯示佈景主題識別碼

色彩佈景主題選取器現在顯示色彩佈景主題的當地語系化名稱及其旁邊的字串識別碼。這樣做是為了協助使用非英文語言套件但只知道佈景主題英文名稱的使用者。

Color Theme Picker in Korean displaying English theme identifiers next to the localized name

註解

註解編輯器用於擴充功能,例如 GitHub Pull Request and Issues 擴充功能,它會在其中顯示提取請求註解。

註解編輯器大小

註解編輯器現在會隨著新增行數而展開,最大高度取決於註解所在的編輯器大小。

Comment editor expanding as lines are added

在未解決的註解上開啟註解檢視

設定 comments.openView 有一個新的可能值 firstFileUnresolved。設定 firstFileUnresolved 會導致註解檢視在每次工作階段第一次開啟具有未解決註解的檔案時開啟。

自動摺疊已解決的註解

依預設,當您解決註解執行緒時,它現在會摺疊。可以使用設定 "comments.collapseOnResolve" 停用此功能。

編輯器

儲存和自動儲存時的程式碼動作

您現在可以在編輯器中啟用自動儲存時的程式碼動作。當您使用視窗變更 (onWindowChange) 或焦點變更 (onFocusChange) 儲存或自動儲存時,這會觸發程式碼動作。若要啟用此功能或更新您目前的設定,請檢查編輯器:儲存時的程式碼動作 (editor.codeActionsOnSave) 並將每個程式碼動作的設定變更為 always

設定值也已更新,目前的布林值將被取代,改用字串等效值。

選項如下

  • explicit:明確儲存時觸發程式碼動作。與 true 相同。
  • always:明確儲存時以及從視窗或焦點變更自動儲存時觸發程式碼動作。
  • never:永遠不會在儲存時觸發程式碼動作。與 false 相同。

此版本中仍然支援布林值。

筆記本

在筆記本中前往符號

啟用 notebook.gotoSymbols.showAllSymbols 後,前往符號快速選取器會填入筆記本中的所有程式碼符號。

儲存格執行時捲動

您現在可以使用 notebook.scrolling.revealNextCellOnExecute 設定,設定在使用 Shift+Enter 執行 notebook.cell.executeAndSelectBelow 時,顯示下一個儲存格多少內容

  • fullCell - 完整下一個儲存格 (預設)。
  • firstLine - 僅第一行。
  • none - 完全不捲動。

下方顯示 "notebook.scrolling.revealNextCellOnExecute": "firstLine"

空白字元修剪支援

筆記本現在會遵循現有的三個空白字元相關設定

  • files.trimTrailingWhitespace - 儲存檔案時修剪尾隨空白字元。
  • files.trimFinalNewlines - 修剪檔案中最後一個換行符號之後的所有換行符號。
  • files.insertFinalNewline - 在檔案結尾自動插入最後一個換行符號。

這些設定會在儲存時套用,包括自動儲存。

已完成的筆記本程式碼動作 API

筆記本現在完全支援貢獻的程式碼動作,並且具有專用的程式碼動作種類來支援它們。如果擴充功能作者定義了具有 kind 前置詞 notebook.source. 的動作,則在儲存時,筆記本編輯器會針對整個筆記本執行提供的動作,而不是針對每個儲存格個別執行。若要編輯將在儲存時執行的程式碼動作,您可以在設定編輯器中設定筆記本:儲存時的程式碼動作,或在您的 settings.json 檔案中編輯 "notebook.codeActionsOnSave"

程式碼動作的目前啟用已更新,先前的布林值已淘汰,改用列舉等效值。選項如下

  • "explicit":明確儲存時觸發程式碼動作。與 true 相同。
  • "never":永遠不會在儲存時觸發程式碼動作。與 false 相同。

第三個選項 "always" 即將推出,以完全比對編輯器程式碼動作,讓使用者可以在自動儲存設定 onFocusChangeonWindowChange 時觸發筆記本程式碼動作。

語言

Perl 6/Raku

Perl 6 語言已重新命名為 Raku (語言識別碼 raku),並且 Raku 將自動選取為 .raku 檔案的語言。

偵錯

JavaScript 偵錯工具

WebAssembly 偵錯

JavaScript 偵錯工具現在可以偵錯編譯成 WebAssembly 的程式碼,如果它包含 DWARF 偵錯資訊。例如,可以使用 Emscripten 編譯的 C++ 程式碼可以進行偵錯

Debugger stopped on a breakpoint in C++ source code

佈景主題:Codesong (在 vscode.dev 上預覽)

若要啟用此功能,您會想要安裝 WebAssembly DWARF Debugging 擴充功能,它會插入內建的 JavaScript 偵錯工具。在 偵錯 WebAssembly 中閱讀更多相關資訊。

WebAssembly 偵錯是建立在 Chromium 作者的 C/C++ Debugging Extension 之上,並在其支援下成為可能。

改進的呼叫堆疊檢視

呼叫堆疊檢視中的方法和函式現在將包含函式 (this) 內容的名稱。例如,類別 Foo 上方法 bar 的呼叫堆疊現在會顯示為 Foo.bar

遠端開發

Remote Development extensions 允許您使用 Dev Container、透過 SSH 或 Remote Tunnels 的遠端機器,或 Windows Subsystem for Linux (WSL) 作為功能完整的開發環境。

此版本新增了使用 Tunnels 連線到 Dev Containers 的能力,類似於透過 SSH 連線。您可以在 Remote Development 版本資訊中深入瞭解此新功能。

擴充功能貢獻

GitHub Copilot

/tests 的改進

我們改進了 /tests,適用於透過 GitHub Copilot Chat 擴充功能提供的聊天檢視和內嵌聊天。/test 斜線命令現在更擅長偵測您正在使用的測試架構,並將以相同的樣式產生新的測試。此外,它在建議新測試檔案的名稱方面應該會更好,例如 foo.pytest_foo.pybar.jsbar.test.js

內嵌聊天變成多輪對話

內嵌聊天現在會保留目前工作階段的所有提示,這可讓您參考先前的訊息並回覆問題。

在下面的簡短影片中,內嵌聊天會記住使用者說他們位於東京,在提供程式碼片段來計算當地時間和與蘇黎世的時差時。

要求 GitHub Copilot 預設為聊天檢視

幾個月前,我們在命令面板中引入了要求 GitHub Copilot 選項,以便您可以將命令面板中的查詢開啟到 Copilot 聊天中,如果命令面板沒有提供有用的答案。

我們收集了關於要求 GitHub Copilot 應該開啟的偏好體驗的回饋:側邊欄中的聊天檢視或快速聊天。為了讓第一次體驗更熟悉,我們選擇了聊天檢視。

話雖如此,如果您希望要求 GitHub Copilot 在快速聊天中開啟,您可以使用 askChatLocation 設定變更行為

"workbench.commandPalette.experimental.askChatLocation": "quickChat"

命令面板類似命令

在此迭代中,我們發佈了命令面板中的 類似命令 功能。Copilot Chat 使用者獲得更棒的類似命令體驗,因為我們可以使用 Copilot AI 來判斷相似性。這些智慧功能有助於同義詞和意圖,而且在我們的測試中,Copilot 也能夠處理跨口語語言的相似性。在命令面板中尋找您要尋找的確切命令從未如此容易!

Jupyter

已完成擴充功能作者的 Jupyter 伺服器提供者 API

Jupyter 擴充功能用於貢獻 Jupyter 伺服器的 API 已完成。擴充功能可以使用 API 來提供自訂 Jupyter 伺服器清單,以顯示在核心選取器中。

API 使用範例可以在 Jupyter Server Provider Sample 中找到。JupyterHub 擴充功能也使用了相同的 API。

npm 套件 @vscode/jupyter-extension 包含所有 TypeScript 類型定義。

JupyterHub 擴充功能

現在有一個 JupyterHub 擴充功能,支援登入 JupyterHub,並針對 VS Code 中筆記本或 互動式視窗 中的核心執行程式碼。此擴充功能也適用於 vscode.devgithub.dev 中的瀏覽器。

如果您對此新擴充功能有任何問題或想要提供意見反應,您可以在 JupyterHub 擴充功能 GitHub 存放庫中提交問題。

Selecting an existing JupyterHub server in the Kernel Picker

Python

Python 偵錯工具更新

幾個月前宣佈的 Debugpy 擴充功能,已重新命名為 Python Debugger,以改善在 Marketplace 中的可探索性。

此擴充功能現在包含新的使用者設定 debugpy.debugJustMyCode,當停用時,它可讓您逐步執行所有應用程式的系統或協力廠商程式庫程式碼 (依預設,偵錯工具僅逐步執行您自己的 Python 程式碼中定義的程式碼)。對於那些想要更方便地針對所有專案停用 justMyCode,而不是必須在所有專案的 launch.json 偵錯組態中手動設定它的人來說,這是一項熱門功能要求。

若要試用,請確定您已安裝 Python Debugger 擴充功能。然後開啟設定編輯器 (⌘, (Windows, Linux Ctrl+,)),搜尋「debugJustMyCode」,然後取消選取核取方塊

Searching "debugJustMyCode" in the Settings editor results in the debugpy.debugJustMyCode setting appearing at the top.

現在,一旦您建立 launch.json 檔案,只要 justMyCode 未在檔案中指定,擴充功能就會依預設使用 debugpy.debugJustMyCode 的值。請注意,當 justMyCodelaunch.json 中指定時,其值會優先於 debugpy.debugJustMyCode 設定。

Pylint 擴充功能的變更時檢查選項

依預設,Pylint 擴充功能只會在儲存檔案時報告錯誤和警告。現在有一個名為 pylint.lintOnChange 的新設定,如果設定為 true,則會指示擴充功能在您輸入時報告錯誤和警告,而無需儲存檔案。

Mypy 擴充功能報告範圍和守護程式模式

Mypy Type Checker 擴充功能現在有兩個新設定,可讓您指定 Mypy 的報告範圍以及是否使用 Mypy 的守護程式。

第一個是 mypy-type-checker.reportingScope,可以設定為 file (預設值) 以僅針對工作區中開啟的檔案啟用問題報告,或設定為 workspace 以針對工作區中的所有檔案啟用報告。

第二個是 mypy-type-checker.preferDaemon,當設定為 true 時,會使用 Mypy 的守護程式 (dmypy) 而不是 Mypy 本身 (mypy) 來執行類型檢查,這在某些情況下可能會快得多。

呼叫引數內嵌提示設定的更新

先前,Pylance 的設定,用於啟用部分呼叫引數的內嵌提示 (python.analysis.inlayHints.callArgumentNames),只能設定為 truefalse,以啟用或停用呼叫引數的類型提示。此設定已修改為允許更精細地控制針對呼叫引數顯示的類型提示。

現在可以設定為 partial 以停用 僅限位置僅限關鍵字 參數的提示,all 以啟用它們,或 off 以完全停用它們。

Python 3.7 支援的淘汰

正如我們在 2023 年 7 月 版本部落格中先前提及的,我們已在 Python 擴充功能中放棄官方 Python 3.7 支援。沒有積極移除 Python 3.7 支援的計畫,因此我們預期擴充功能在可預見的未來將繼續非官方地與 Python 3.7 搭配運作。

請記住,所有其他 Python 版本現在都採用年度發行週期,因此,我們預期一旦 Python 版本在隔年的第一個擴充功能版本中達到 EOL,就會停止對其進行官方支援 (例如,Python 3.8 預定於 2024 年 10 月達到 EOL,因此 2025 年的第一個擴充功能版本將停止官方支援)。

GitHub Pull Requests and Issues

GitHub Pull Requests and Issues 擴充功能上取得了更多進展,它可讓您處理、建立和管理提取請求和問題。

  • 已改進檢閱 PR 的協助工具。
  • 即使分支尚未發佈,也會在建立檢視中顯示提交。

檢閱擴充功能 0.74.0 版本的變更記錄,以瞭解其他重點。

預覽功能

最接近的快速修復鍵盤快速鍵

有一個新的設定可從 ⌘. (Windows, Linux Ctrl+.) (命令 ID editor.action.quickFix) 啟動行中最接近的快速修復,無論您的游標位於該行中的哪個位置。

命令會醒目提示將使用快速修復重構或修復的原始程式碼。一般程式碼動作和非修復重構仍然可以在游標位置啟動。若要啟用此功能,請檢查程式碼動作小工具:包含鄰近的快速修復 (editor.codeActionWidget.includeNearbyQuickfixes)。

Example of new Quick Fix behavior, showing activation on nearest errors, and showing how all Code Actions can still be utilized at the cursor location

原始檔控制同步檢視

此里程碑的版本包含 原始檔控制同步 檢視的早期版本。新的檢視提供有關尚未推送至遠端分支 (輸出) 的本機變更,以及尚未從遠端分支提取到本機 (輸入) 的變更的詳細資訊。檢視也讓您可以發佈分支並與遠端分支同步變更 (提取/推送)。新的檢視仍然是實驗性的,我們將根據使用者意見反應在未來的里程碑中繼續改進它。您可以透過 scm.experimental.showSyncView 設定顯示新的檢視。請試用它並在 問題 #192290 中提供意見反應。

Source Control Sync view showing a diff view of an incoming change

命令中心和偵錯工具列

有一個新的實驗性設定可在命令中心內顯示偵錯工具列。請確定已啟用命令中心並設定 debug.debugToolbarLocation 設定

"debug.toolBarLocation": "commandCenter"

Debug controls inside the Command Center

佈景主題:GitHub Light Colorblind (Beta) (在 vscode.dev 上預覽)

擴充功能撰寫

支援字串設定驗證的 Unicode 字元類別逸出

Unicode 字元類別逸出現在在 regexes 中支援,以驗證字串和字串陣列設定。換句話說,字串和字串陣列設定現在可以指定具有值的 pattern 欄位,例如 "\\p{Letter}+",允許僅包含字母的字串值。

目前不支援物件設定使用 Unicode 字元類別逸出。

貢獻至終端機功能表

有兩個新的功能表可以貢獻至 terminal/contextterminal/title/context,它們會分別將項目新增至終端機內容功能表和終端機索引標籤內容功能表。使用範例

{
  "contributes": {
    "menus": {
      "terminal/context": [
        { "command": "terminalTest.sendText" }
      ],
      "terminal/title/context": [
        { "command": "terminalTest.sendText" }
      ]
    }
    }
}

新的 env.onDidChangeShell 事件

有一個新的 env.onDidChangeShell: Event<string> 事件,當 env.shell 的值變更時會觸發。

keytar 從 VS Code 中移除

早在 6 月,我們就將 SecretStorage API 移至使用 Electron 的 safeStorage,並包含現在已封存且未維護的 keytar 模組的 淘汰和移除計畫 (從 VS Code 中移除)。我們最初沒有移除 keytar,因為某些擴充功能仍然直接匯入/要求 keytar (在 SecretStorage API 存在之前建議這樣做,但在 SecretStorage API 發行後則不建議)。

根據產品遙測和沒有 keytar 的 Insiders 版本,keytar 的使用量已下降,我們已準備好從 VS Code 中完全移除 keytar

這對我的擴充功能有什麼意義?

如果您使用 SecretStorage API,則沒有任何影響。自 6 月以來,我們一直在將秘密從 keytar 中移出,因此如果您在兩個月內觸及它們,您的所有秘密都應該已移轉完成。

如果您仍然在擴充功能中直接使用 keytar,則有幾個選項可供您考慮

  • (建議) 使用 VS Code 在 ExtensionContext 上提供的 SecretStorage API。此 API 是跨平台的,並且適用於 VS Code 支援的所有平台。它也由 VS Code 團隊維護,將繼續維護,並且在此時已成為 VS Code API 的一部分多年。
  • (不建議) 您可以將 keytar 模組與您的擴充功能捆綁在一起。請記住,keytar 是一個原生節點模組,這表示您需要為您想要支援的每個平台發佈平台特定的擴充功能

--disable-keytar 已重新命名為 --use-inmemory-secretstorage

當使用 SecretStorage API 時,--disable-keytar 旗標會停用在本機上持續保存秘密。這主要用於 CI 環境中,這些環境通常沒有設定金鑰環,因為如果沒有金鑰環,當使用 SecretStorage API 但金鑰環不可用時,VS Code 會擲回錯誤。

由於我們已移除 keytar,因此此旗標需要一個新名稱。我們現在已將 --disable-keytar 標記為已淘汰,改用 --use-inmemory-secretstorage。在未來,我們將考慮移除 --disable-keytar,但在不久的將來不會移除。

最後,我們要感謝所有迅速採取行動以移出 keytar 並確保其使用者在 VS Code 中獲得絕佳且安全秘密體驗的令人難以置信的擴充功能作者!

語言伺服器協定

新版本的 Language Server Protocol npm 套件已發行 (protocol@3.17.5、client@9.0.1 和 server@9.0.1)。

發行重點如下

  • 新增建議的內嵌完成要求。

  • 新增建議的格式化範圍要求。

  • 新增建議的摺疊範圍重新整理要求。由於 API 需要公開事件發射器,因此這變更了摺疊範圍功能的形狀,並且是一個重大變更。若要取得提供者,您現在需要使用下列程式碼

    client.getFeature(lsclient.FoldingRangeRequest.method).getProvider(document)?.provider;
    
  • 各種 錯誤修正

工程

浮動編輯器視窗探索

我們已開始探索如何將編輯器從工作台視窗中拉出到它們自己的視窗中。此功能是我們最高票數的 功能要求,我們計畫在 10 月為我們的 Insiders 使用者提供第一個可運作的版本來試用。

所有視窗的編輯器都基於相同的底層編輯器模型運作,因此在一個視窗中所做的變更會即時反映在所有其他視窗中。您可以在浮動視窗中建立任何編輯器版面配置,並在您想要的任意多個視窗中開啟任何您喜歡的編輯器。

對於我們的第一個工作版本,我們預想狀態列也會出現在浮動視窗中,以便顯示編輯器資訊,例如行號和選取範圍。敬請期待未來幾個月的更多開發進展!

vscode.dev 現在已跨來源隔離

vscode.dev 現在已啟用跨來源隔離。這啟用了許多強大的新功能,例如共享陣列緩衝區,這是跨檔案 TypeScript 支援、網頁中的 Python 執行以及一般 vscode-wasm-wasi 的基礎構建區塊。

設定同步疑難排解

我們新增了一個新的開發人員命令 Developer: Download Settings Sync Activity,可下載您所有的設定同步活動,包括雲端和本機上的記錄。這將幫助我們排解設定同步的問題。我們也建立了一個新的檢視畫面來瀏覽下載的活動。您可以執行 Settings Sync: Show Synced Data 命令並啟用 SYNC ACTIVITY (DEVELOPER) 檢視畫面來開啟此檢視畫面。您可以選取檢視畫面中的 Load Sync Activity 按鈕來載入下載的同步活動,如下所示。

Sync activity (developer) view with Load Sync Activity button

值得注意的修復

  • 190679 主題顏色 icon.foreground 不一致,且不適用於 .svg

感謝

最後但同樣重要的是,衷心感謝 VS Code 的貢獻者。

問題追蹤

對我們的問題追蹤的貢獻

提取請求

vscode 的貢獻

vscode-css-languageservice 的貢獻

vscode-html-languageservice 的貢獻

vscode-languageserver-node 的貢獻

vscode-pull-request-github 的貢獻