🚀 在 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 月發行版本。此版本包含許多更新,我們希望您會喜歡,其中一些主要重點包括

如果您想在線上閱讀這些發行說明,請前往 更新,網址為 code.visualstudio.com

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

協助工具

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

GitHub 提取請求和問題擴充功能可讓您處理、建立及管理提取請求和問題,此反覆運算針對註解和檢閱體驗進行了許多協助工具改進。

當螢幕閱讀器使用者開啟編輯器時,如果編輯器包含註解範圍,則會通知使用者。新的協助工具說明對話方塊 (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 提取請求和問題擴充功能,其中顯示提取請求註解。

註解編輯器大小

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

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 設定,設定在執行 notebook.cell.executeAndSelectBelowShift+Enter 時,顯示下一個儲存格的程度

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

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

空白字元修剪支援

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

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

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

最終的筆記本程式碼動作 API

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

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

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

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

語言

Perl 6/Raku

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

偵錯

JavaScript 偵錯工具

WebAssembly 偵錯

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

Debugger stopped on a breakpoint in C++ source code

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

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

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

改進的呼叫堆疊檢視

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

遠端開發

遠端開發擴充功能可讓您使用 開發容器、透過 SSH 或 遠端通道的遠端機器,或 適用於 Linux 的 Windows 子系統 (WSL) 作為功能完整的開發環境。

此版本新增了使用 通道連線到開發容器的功能,類似於透過 SSH 連線。您可以在 遠端開發發行說明中深入瞭解此新功能。

擴充功能貢獻

GitHub Copilot

/tests 的改進

我們改進了 GitHub Copilot Chat 擴充功能提供的「聊天」檢視和內嵌聊天的 /tests/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 擴充功能的 API,用於貢獻 Jupyter 伺服器已最終確定。擴充功能可以使用 API 來提供自訂 Jupyter 伺服器的清單,以顯示在核心選取器中。

API 使用範例可在 Jupyter 伺服器提供者範例中找到。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 偵錯工具,以提高在 Marketplace 中的可探索性。

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

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

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

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

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

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

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

Mypy 類型檢查器擴充功能現在有兩個新設定,可讓您指定 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 提取請求和問題

GitHub 提取請求和問題擴充功能方面取得了更多進展,此擴充功能可讓您處理、建立和管理提取請求和問題。

  • 已改進檢閱 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 淺色色盲 (Beta)(在 vscode.dev 上預覽)

擴充功能撰寫

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

Unicode 字元類別逸出現在在 regex 中受到支援,以驗證字串和字串陣列設定。換句話說,字串和字串陣列設定現在可以指定具有值的 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 的使用量已下降,我們已準備好將 keytar 完全從 VS Code 中移除。

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

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

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

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

--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 支援、Web 中的 Python 執行以及一般的 vscode-wasm-wasi 的基礎構建模組。

設定同步疑難排解

我們新增了一個新的開發人員命令 開發人員:下載設定同步活動,用於下載您的所有 設定同步 活動,包括雲端和本機上的活動,以及記錄檔。這將幫助我們排解設定同步的問題。我們也建立了一個新的檢視來瀏覽下載的活動。您可以執行命令 設定同步:顯示已同步資料 並啟用 同步活動 (開發人員) 檢視來開啟此檢視。您可以選取檢視中的 載入同步活動 按鈕來載入下載的同步活動,如下所示。

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 的貢獻