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

2024 年 2 月(版本 1.87)

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

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

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

歡迎使用 Visual Studio Code 2024 年 2 月釋出版本。此版本有許多更新,我們希望您會喜歡,其中一些主要亮點包括:

如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新Insiders:想盡快嘗試新功能嗎?您可以下載每晚Insiders版本並儘快嘗試最新更新。

輔助功能

在編輯器中使用聽寫功能

現在,只要您安裝了 VS Code 語音擴充套件,就可以直接在編輯器中使用語音聽寫功能。

我們添加了用於啟動和停止編輯器聽寫的新命令:語音:在編輯器中開始聽寫⌥⌘V (Windows、Linux Ctrl+Alt+V))和語音:在編輯器中停止聽寫Escape)。

您可以按住啟動命令的鍵繫結(⌥⌘V (Windows、Linux Ctrl+Alt+V))以啟用對講機模式,在此模式下,一旦您鬆開按鍵,語音識別就會停止。

注意: 聽寫甚至在其他使用富編輯器的位置也能正常工作,例如 SCM 提交輸入框和檢視拉取請求時的評論輸入欄位。

語音識別支援多種語言

當您使用 VS Code 語音擴充套件時,現在可以使用 accessibility.voice.speechLanguage 設定從 26 種受支援語言中選擇一種。

語音擴充套件的每種語言都作為其自己的擴充套件提供。當您首次啟動語音識別時,您將看到為所選的每種語言安裝擴充套件。

輔助功能訊號

輔助功能訊號包括聲音(以前稱為音訊提示)和通知(以前稱為警報)。

命令幫助:列出訊號聲音幫助:列出訊號通知允許使用者檢視可用的訊號並進行配置。遷移到此新配置會自動進行。

之前

"audioCues.clear": "on | auto | off"
"accessibility.alert.clear": true | false

之後

"accessibility.signals.clear": {
    "sound": "auto | on | off",
    "announcement" (optional): "auto | off"
}

工作臺

發行說明中的互動式設定

為了讓您更輕鬆地開始使用新功能,您現在可以直接從發行說明中啟用或檢視設定。當您在 VS Code 中檢視發行說明(顯示發行說明命令)時,請注意某些設定帶有一個齒輪圖示。選擇設定或齒輪圖示即可立即與該設定進行互動。

Example of an interactive setting in release notes

語言模型訪問的透明度和控制

本次迭代中,我們引入了一個提議的 API,它允許擴充套件使用 GitHub Copilot Chat 的語言模型。為了提供對模型訪問的最大透明度和控制,我們添加了以下功能。

像管理身份驗證訪問一樣管理語言模型訪問

我們發現管理語言模型訪問與在 VS Code 中管理 GitHub 賬戶或 Microsoft 賬戶(或任何利用 `AuthenticationProvider` 模型的東西)的訪問非常相似。由於這些相似之處,我們也利用了 VS Code 的身份驗證堆疊來訪問語言模型。

當一個擴充套件想要訪問另一個擴充套件的語言模型時,它們會看到一次性訪問提示,該提示將持續存在:顯示擴充套件需要語言模型訪問的模態對話方塊

授予訪問許可權後,您可以在管理帳戶訪問許可權的同一位置(即帳戶選單中)管理該訪問許可權

Manage trusted extensions options in the account menu

“管理受信任的擴充套件”將帶您進入一個快速選擇選單,您可以在其中管理訪問許可權(如果選擇這樣做)

Manage trusted extensions quick pick

在完成初步工作後,我們將繼續完善體驗,使其儘可能流暢和清晰。

跟蹤擴充套件的語言模型使用情況

您可以在擴充套件編輯器和執行時擴充套件編輯器中跟蹤擴充套件的語言模型使用情況。以下影像顯示了 Copilot Chat 示例擴充套件向 GitHub Copilot Chat 語言模型發出的請求數量。

Tracking language model usage in extension editor

Tracking language model usage in running extensions editor

編輯器

編輯器粘性滾動

本次迭代中,我們預設在編輯器中啟用粘性滾動。您可以使用 editor.stickyScroll.enabled 設定進行更改。

我們還將編輯器粘性小部件中可顯示的最大行數從 10 行增加到 20 行。您可以使用 editor.stickyScroll.maxLineCount 設定配置最大行數。

多游標行內完成

本次迭代中,我們添加了對多游標行內完成的支援。現在,行內完成將在主游標和次游標位置進行預覽和應用。

多差異編輯器中的重構預覽

使用重構預覽,您可以檢視程式碼重構將應用的更改。重構預覽更改現在顯示在多差異編輯器中,這有助於一目瞭然地檢視所有更改並將其與以前的版本進行比較。

終端

跟蹤命令持續時間

現在,當啟用 shell 整合時,將跟蹤終端持續時間,並在命令懸停時顯示詳細資訊

Hovering the terminal command shows how long it took in milliseconds

新的放大、縮小和重置命令

有新的命令可以放大、縮小和重置終端字型大小。這些命令預設未繫結,但您可以將它們繫結到您喜歡的鍵繫結。

  • 終端:增大字型大小 (workbench.action.terminal.fontZoomIn)
  • 終端:減小字型大小 (workbench.action.terminal.fontZoomOut)
  • 終端:重置字型大小 (workbench.action.terminal.fontZoomReset)

原始碼管理

在視窗標題中包含儲存庫或分支名稱

使用者可以使用 window.title 設定自定義視窗標題。本次迭代中,我們添加了兩個可與此設定一起使用的新變數:${activeRepositoryName}${activeRepositoryBranchName}。這些變數分別替換為活動儲存庫的名稱和活動分支的名稱。

提交輸入驗證改進

本次迭代中,我們探索了使用語言診斷為編寫提交訊息提供更好的輸入驗證。使用語言診斷使我們能夠顯示可用於解決輸入驗證警告的程式碼操作。我們添加了程式碼操作以刪除空白字元,根據 git.inputValidationSubjectLengthgit.inputValidationLength 設定自動換行,並且我們期待在未來新增更多程式碼操作。

要啟用它,請切換 git.inputValidation 設定。在預設啟用此功能之前,我們還有一些問題需要解決,但在此期間,請隨意啟用它並向我們提供您的反饋。

入站/出站更改設定管理

我們繼續完善“原始碼管理”檢視的入站/出站部分。本次迭代中,我們在“入站/出站”分隔符中添加了一個設定操作,允許使用者更輕鬆地切換 scm.showIncomingChangesscm.showOutgoingChangesscm.showChangesSummary 設定。這些操作也可在“原始碼管理”檢視標題欄的 `...` 選單中的入站與出站選單中找到。

關閉所有未修改的編輯器命令

為了幫助進行編輯器管理,我們已將關閉所有未修改的編輯器命令新增到命令面板,該命令將關閉所有未修改檔案的編輯器。該命令不會關閉具有未儲存更改的編輯器。

Notebook

筆記本的縮排設定

我們現在透過 notebook.editorOptionsCustomizations 設定支援特定於筆記本的縮排設定。此設定允許使用者透過 editor.tabSizeeditor.indentSizeeditor.insertSpaces 設定為筆記本設定特定的縮排樣式。

使用者還會注意到一個名為筆記本縮排的狀態列條目,它顯示筆記本編輯器的當前縮排設定。此條目有一個快速選擇選單,可以管理縮排設定,而無需開啟“設定”編輯器。這與編輯器中可用的快速選擇選單相同。

除錯

支援新的 BreakpointMode

VS Code 支援除錯介面卡協議 (DAP) 的新增功能,允許您設定不同的斷點“模式”。此功能通常可由本機程式碼的偵錯程式使用,例如,設定硬體斷點與軟體斷點。斷點的模式可以透過其上下文選單中的編輯模式操作進行更改。

Breakpoint context menu now has an 'Edit Mode...' option to change the breakpoint mode

遠端開發

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

亮點包括:

  • 在向工作區新增開發容器配置檔案時,GitHub Copilot Chat 建議模板和功能

您可以在遠端開發發行說明中瞭解有關這些功能的更多資訊。

不要錯過最近的使用 Visual Studio Code 進行遠端開發學習路徑,以瞭解 VS Code 中不同的遠端開發功能。

對擴充套件的貢獻

GitHub Copilot

重新命名建議

我們正在逐步推出由 Copilot 提供支援的重新命名建議。當您在編輯器中重新命名一個符號時,GitHub Copilot 會根據您的程式碼,為該符號建議一個可能的名稱列表。

行內聊天輔助功能檢視

行內聊天現在具有一個輔助功能檢視,它像輔助差異檢視器一樣顯示程式碼更改。當您使用螢幕閱讀器模式時,輔助功能檢視會啟用。您也可以使用 inlineChat.accessibleDiffView 設定將其配置為始終開啟或關閉。

此外,現在可以使用鍵盤快捷鍵 F7Shift+F7 導航更改塊。

行內聊天的預設模式

我們已停用 live preview 模式,並將 live 設定為行內聊天的預設模式。這意味著建議將直接應用於編輯器,並透過行內差異突出顯示更改。

麥克風圖示始終可見

用於在 Copilot Chat 中啟動語音識別的麥克風圖示現在始終可見。當 VS Code 語音擴充套件尚未安裝時,選擇該圖示會首先要求安裝該擴充套件以啟用語音轉文字功能。

Microphone icon in chat input

如果您對此功能不感興趣,或者只想透過鍵盤快捷鍵使用它,您可以從上下文選單中隱藏該功能

Hide microphone icon in chat input

對代理和斜槓命令的語音支援

當您使用 VS Code 語音擴充套件透過語音填充聊天輸入欄位時,“at workspace”或“slash fix”等短語現在會轉換為相應的代理和斜槓命令。這在聊天檢視和行內聊天中都適用。

隨處可見的對講機模式

當您使用 VS Code 語音擴充套件時,命令語音:啟動語音聊天⌘I (Windows、Linux Ctrl+I))現在可以在任何地方使用,並根據您的焦點位置(編輯器中的行內聊天,否則為面板聊天)彈出語音聊天。

要啟用對講機模式,請按住鍵盤快捷鍵。語音識別將一直處於活動狀態,直到您鬆開按鍵,之後請求將自動提交。

Copilot:解釋此內容基於游標位置

以前,在聊天中輸入 解釋此內容 需要您首先在活動編輯器中選擇要解釋的文字。現在,您還可以將游標放在識別符號上,讓 Copilot 檢視識別符號的定義。如果定義在另一個檔案中,則需要提供豐富的語言支援。

預覽:#codebase 變數

本次迭代中,在 GitHub Copilot Chat 的預釋出版本中,我們引入了一個名為 #codebase 的新聊天變數。此變數可用於根據您的查詢向 Copilot 或您正在交談的聊天參與者提供工作區上下文。

在此示例中,您可以將 #codebase 視為首先向 @workspace 提問,然後將該響應新增到您向 @terminal 提問的問題中。

這是一個預覽功能,因此 #codebase 可能不是此變數的最終名稱,但其意圖是我們將提供某種方式將工作區上下文包含到聊天參與者中。

再次強調,這僅在 GitHub Copilot Chat 的預釋出版本中可用。請告訴我們您的想法以及您如何使用它!

終端工作區上下文

終端不再自動拉取工作區上下文,這可能會花費一些時間。相反,您需要使用 #codebase 變數明確包含它。

終端聊天位置

有一個新設定 github.copilot.chat.terminalChatLocation,它控制終端聊天體驗。預設值為 chatView,如果喜歡以前的行為,可以配置為 quickChat

Jupyter

本地執行 Jupyter 伺服器的語言伺服器支援

當連線到本地 Jupyter 伺服器時,Jupyter 擴充套件之前將這些 Jupyter 伺服器視為遠端伺服器。因此,Pylance 擴充套件無法檢測已安裝的包。

Failed language features for remote Jupyter Servers

本次迭代中,Jupyter 擴充套件會檢測所連線的 Jupyter 伺服器是本地還是遠端。這使得 Pylance 擴充套件能夠根據已安裝的包(在本地 Python 環境中)提供更豐富的語言功能。

Language features for remote Jupyter Servers

Python

Python REPL 的 Shell 整合

現在,透過 WSL 擴充套件,我們在 Mac、Linux 和 Windows 上啟用了 Python REPL 的 Shell 整合。當您在 Python REPL 中執行命令時,彩色圓圈裝飾器會指示命令是成功還是失敗。此外,我們還支援 Python REPL 的終端:執行最近的命令...命令,這使您能夠檢視和利用 REPL 的命令歷史記錄。

我們現在還支援所有作業系統的 Python shell 檔案歷史記錄,可透過終端:執行最近的命令訪問。

減少第一個命令被忽略的風險

以前,許多 Python REPL 使用者注意到他們的第一個 Python REPL 命令存在問題(例如,使用 Shift+Enter)。他們的 Python 命令要麼被忽略,沒有傳送到 Python REPL,要麼命令被多次貼上到啟動 Python REPL 的 shell 中,而不是 Python REPL 本身。這種行為尤其發生在 Windows 使用者或使用舊機器的使用者身上。

在本次迭代中,我們努力減輕和減少這種行為發生的風險。使用者現在在將他們的 Python 命令傳送到 VS Code 中的第一個 REPL 例項時,第一個命令丟失的情況較少發生。

改進了新增缺失匯入的功能

Pylance 擴充套件提供了一個用於新增缺失匯入的新增匯入程式碼操作。在 Pylance 的預釋出版本中,我們改進了此程式碼操作。Pylance 現在使用啟發式方法,只顯示前三個高置信度匯入選項,並根據以下標準進行優先順序排序:最近使用的匯入、來自同一模組的符號、來自標準庫的符號、來自使用者模組的符號、來自第三方包的符號,最後按模組和符號名稱排序。

此外,還引入了兩個新的程式碼操作:搜尋其他匯入匹配項,它顯示一個快速選擇選單,允許您搜尋與缺失匯入符號字首匹配的匯入選項,以及更改拼寫,它為因拼寫錯誤而缺失的匯入提供匯入建議。

您現在可以使用 python.analysis.addImport.heuristics 設定啟用此行為。我們計劃很快將其設定為新的預設行為,並在未來的版本中棄用此設定。

在除錯 Django 或 Flask 應用程式時自動開啟瀏覽器

使用 Python 偵錯程式擴充套件,開發和測試您的 Python Web 應用程式現在更加方便!現在,您可以透過在 launch.json 配置中設定 autoStartBrowser: true,在啟動 Django 或 Flask 應用程式的偵錯程式時自動開啟瀏覽器

{
  "name": "Python Debugger: Flask",
  "type": "debugpy",
  "request": "launch",
  "module": "flask",
  "env": {
    "FLASK_APP": "hello_app.webapp",
    "FLASK_DEBUG": "1"
  },
  "args": ["run"],
  "jinja": true,
  "autoStartBrowser": true
}

符號連結工作區中 Pytest 的 Bug 修復

我們實現了一個錯誤修復,使 pytest 測試能夠在具有符號連結的工作區中正常執行。在測試重寫中,來自符號連結位置的測試透過其符號連結路徑正確引用和執行。

GitHub 拉取請求

GitHub Pull Requests 擴充套件取得了更多進展,該擴充套件使您能夠處理、建立和管理拉取請求和問題。新功能包括:

  • 從“GitHub 拉取請求和問題”更名為“GitHub 拉取請求”
  • 在合併/squash 提交時,可以選擇與合併或 squash 提交關聯的電子郵件
  • 設定 githubPullRequests.labelCreated 可用於配置自動新增到已建立 PR 的標籤
  • 現在支援“所有者級別”的 PR 模板
  • 可以在建立 PR 和問題時新增專案

檢視擴充套件的 0.82.0 版本更新日誌,瞭解其他亮點。

預覽功能

對於擴充套件作者:@vscode/l10n-dev 和 Azure AI Translator 的預覽

本次迭代中,我們引入了一個新命令,它是 @vscode/l10n-dev 的子命令,允許您使用 Azure AI Translator 翻譯您的字串。

匯出字串並建立 Azure AI Translator 例項後,您可以設定 AZURE_TRANSLATOR_KEYAZURE_TRANSLATOR_REGION 環境變數,然後執行以下命令以使用 Azure AI Translator 生成翻譯

npx @vscode/l10n-dev generate-azure -o ./l10n/ ./l10n/bundle.l10n.json ./package.nls.json

Azure AI Translator 提供免費套餐。我們認為這是一個很好的機會,可以為擴充套件作者提供工具,讓他們更輕鬆地支援使用各種語言的眾多使用者。請記住,這些是機器翻譯,因此可能並不總是完美的。如果您有能力,它們可以成為由講該語言的人進行更精確翻譯的良好起點。

欲瞭解更多資訊,請參閱 l10n-dev 文件中關於 Azure AI Translator 整合的部分。

擴充套件開發

擴充套件中的測試覆蓋率

使用 測試 CLI 的擴充套件作者可以透過更新到最新版本的 @vscode/test-cli 包來生成測試覆蓋率。

在命令列中,可以透過在執行測試時傳遞 --coverage 標誌來生成覆蓋率;在 VS Code UI 中,可以透過使用執行並帶覆蓋率操作來生成覆蓋率。

launch.json 中的測試配置

您現在可以在 launch.json 配置中引用測試配置檔案

{
    "type": "extensionHost",
    "request": "launch",
    "name": "My extension tests",
+   "testConfiguration": "${workspaceFolder}/.vscode-test.js",
-   "args": ["--extensionDevelopmentPath=${workspaceFolder}"]
},

以前所需的各種 args 會為您生成,但任何額外的引數都將附加到 VS Code 的命令列中。

在問題報告器中貢獻額外資料

上次迭代中,我們在 workbench.action.openIssueReporter 命令中添加了 datauri 欄位。這使得擴充套件可以直接開啟原生問題報告器,並預填充更多資訊。

為了讓擴充套件在透過 Help: Reporter Issues... 導航正常問題報告器流程的單獨情況下受益,擴充套件可以貢獻一個自定義命令(將呼叫 openIssueReporter)和一個選單貢獻點到 issue/reporter

package.jsoncontributes 的貢獻命令和選單示例

"commands": [
    {
        "command": "extension.myCommand",
        "title": "Report Issue"
    }
],
    "menus": {
        "issue/reporter": [
            {
                "command": "extension.myCommand"
            }
        ]
    }

訂閱 問題 #196863 以獲取 API 和 openIssueReporter 命令的更新或更改。

提議的 API

聊天和語言模型 API 接近定稿

我們一直在努力支援擴充套件對聊天檢視的貢獻和語言模型的通用使用。我們現在正處於最終確定以下 API 的最後階段,並很樂意聽取您的反饋

瞭解如何在我們的擴充套件指南中構建聊天擴充套件以及如何使用語言模型

FindFiles2 API

我們添加了一個新的提議擴充套件 API,它是現有 workspace.FindFiles API 的改進版本。新的 workspace.FindFiles2 API 引入了新選項,允許工作區檔案搜尋

  • 遵循 files.excludesearch.exclude 設定
  • 遵循忽略檔案
  • 執行模糊搜尋
  • 遵循符號連結

您可以在此處檢視新的 API。

請注意,FindFiles2 是一個暫定名稱,此功能將來可能會作為 FindFiles 的替代過載提供。

測試覆蓋率 API

本次迭代,測試覆蓋率 API 和編輯器內體驗已處於功能完整狀態。我們鼓勵擴充套件作者在 VS Code 1.88 版本中最終確定之前試用並提供反饋。

Java 擴充套件包已經採用了測試覆蓋率 API。開發人員已經可以看到執行 Java 測試的覆蓋率結果。現在,您可以透過選擇執行帶覆蓋率測試按鈕,並在測試資源管理器檢視中檢視測試覆蓋率面板來獲取測試覆蓋率。在團隊的12 月1 月更新中瞭解更多關於 Java 擴充套件包的測試覆蓋率資訊。

雖然 API 太長而無法在此處包含,但我們認為它相當簡單,並歡迎您在問題 #123713 中提出建議。

除錯視覺化器 API

我們有一個新的 API,它允許擴充套件為變數貢獻*視覺化器*。這些視覺化器可以是執行命令(例如開啟新編輯器)的操作,也可以是嵌入到除錯檢視中並取代資料預設表示形式的樹。

您可以在此處檢視新的 API。

新符號名稱提供程式 API

當用戶想要重新命名符號時,此 API 允許擴充套件提供名稱建議。

值得注意的修復

  • 184046 連結有時在終端中完全停止工作

感謝

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

問題跟蹤

對我們問題跟蹤的貢獻

拉取請求

vscode 的貢獻

vscode-black-formatter 的貢獻

vscode-hexeditor 的貢獻

vscode-isort 的貢獻

vscode-languageserver-node 的貢獻

vscode-pull-request-github 的貢獻

language-server-protocol 的貢獻

node-pty 的貢獻