2022 年 5 月 (版本 1.68)
更新 1.68.1:此更新解決了這些問題。
下載:Windows:x64 Arm64 | Mac:通用 Intel Silicon | Linux:deb rpm tarball Arm snap
歡迎使用 Visual Studio Code 2022 年 5 月發行版本。此版本有許多更新,我們希望您會喜歡,其中一些主要重點包括
- 設定顯示語言 - 以語言本身查看已安裝和可用的語言套件。
- 問題面板表格檢視 - 以表格檢視錯誤和警告,以快速篩選其來源。
- 已棄用的擴充功能 - 了解擴充功能是否已棄用或應被取代。
- 擴充功能贊助 - 支援開發您喜愛擴充功能的開發人員。
- 使用 .gitignore 隱藏 Explorer 中的檔案 - 重複使用現有的
.gitignore
以隱藏 Explorer 中的檔案。 - 終端機色彩和對比度增強功能 - 尋找符合背景色彩、最小對比度。
- Git 分支保護 - 分支保護功能在 VS Code 內部即可使用。
- TypeScript 前往原始碼定義 - 直接跳到符號的 JavaScript 實作。
- 適用於 Web 的 VS Code 本地化 - vscode.dev 現在符合您選擇的瀏覽器語言。
- 開發容器規格 - 深入了解不斷發展的開發容器規格。
- 預覽:Markdown 連結驗證 - 偵測標題、影像和檔案的損壞連結。
如果您想在線上閱讀這些發行說明,請前往 Updates,網址為 code.visualstudio.com。
Insiders: 想要盡快試用新功能嗎?您可以下載每夜組建的 Insiders 組建,並在最新更新可用時立即試用。
工作台
設定顯示語言改進
設定顯示語言 命令已重新整理以包含
- 該語言的語言名稱。
- 可用語言 區段,顯示您的電腦上未安裝哪些語言,選取其中一種語言將自動安裝並套用該語言。
佈景主題:Panda Theme
這應有助於探索可用的語言套件。請告訴我們您的想法!
問題面板表格檢視
在此里程碑中,我們為使用者新增了一項新功能,可以在樹狀檢視和表格之間切換「問題」面板的檢視模式。與樹狀檢視相比,表格檢視顯示每個問題的來源(語言服務或擴充功能),讓使用者可以依來源篩選問題。
您可以使用「問題」面板右上角的 以表格檢視/以樹狀檢視 按鈕切換檢視 UI,或使用 問題:預設檢視模式 設定 (problems.defaultViewMode
) 變更預設檢視模式
已棄用的擴充功能
在此里程碑中,我們在 VS Code 中新增了對已棄用擴充功能的支持。擴充功能可以簡單地棄用,或為了另一個擴充功能而棄用,或者在其功能內建於 VS Code 時棄用。VS Code 將在「擴充功能」檢視中將擴充功能呈現為已棄用,如下所示。
不再維護的已棄用擴充功能。
為了另一個擴充功能而棄用的擴充功能。在這種情況下,VS Code 不允許使用者安裝此擴充功能。
其功能內建於 VS Code 的已棄用擴充功能,可以透過設定設定來啟用。
VS Code 不會自動移轉或解除安裝已棄用的擴充功能。將會有一個 移轉 按鈕,引導您切換到建議的擴充功能。
注意: 已棄用擴充功能清單由 VS Code 維護。如果您有認為應該棄用的擴充功能,請透過在此討論中留言與我們聯絡。
贊助擴充功能
VS Code 現在允許使用者贊助他們喜愛的擴充功能。當擴充功能可以贊助時,VS Code 將在「擴充功能」檢視的「詳細資料」頁面中呈現 贊助 按鈕,如下所示
贊助 按鈕將引導您前往擴充功能的贊助 URL,您可以在其中提供您的支援。請參閱擴充功能贊助以了解如何為您的擴充功能選擇加入此功能。
根據 .gitignore 隱藏 Explorer 中的檔案
檔案總管現在支援剖析和隱藏 .gitignore
檔案排除的檔案。可以透過 Explorer:排除 Git 忽略 (explorer.excludeGitIgnore
) 設定啟用此功能。此設定與 files.exclude
一起運作,以隱藏檔案總管中不需要的檔案。
注意:目前,無法剖析否定 glob,例如 !package.json
。
鎖定浮動視窗位置
由於其他 UI 元素(例如,捲軸)的存在,某些自訂浮動視窗難以或無法滑鼠懸停。在浮動視窗處於作用中狀態時按住 Alt
鍵現在會「鎖定」它,使其具有更寬的邊框,並防止滑鼠在浮動視窗外部移動而隱藏它。這主要是協助工具功能,使浮動視窗與螢幕放大鏡更好地搭配使用,但它對於從浮動視窗複製文字也很有用。請注意,此功能僅適用於編輯器外部,因為除非透過 editor.hover.sticky
設定另行指定,否則編輯器浮動視窗始終可以滑鼠懸停。
設定編輯器改進
設定編輯器現在顯示語言特定設定的預設值覆寫指示器。您可以透過在「設定」編輯器搜尋列中新增語言篩選器來檢視語言特定設定,方法是明確輸入 (@lang:javascript
),或按一下搜尋列右側的篩選器按鈕,然後選取 語言 選項。
當預設值覆寫指示器出現時,表示語言特定設定的預設值已被擴充功能覆寫。指示器也表示哪個擴充功能覆寫了預設值。
佈景主題:Light Pink
此反覆運算也修正了「設定」編輯器中某些連結在「設定」編輯器搜尋列中已存在搜尋查詢時無法正確重新導向的行為。連結現在也具有適當的樣式,因此當滑鼠懸停在連結上方時,會更清楚。
<video src="/assets/updates/1_68/settings-editor-working-links.mp4" autoplay loop controls muted title="在「設定」編輯器中搜尋「字型」一詞後,並在目錄中選取終端機類別,設定 terminal.integrated.fontFamily 會顯示出來,其描述包含 editor.fontFamily 設定的連結。現在按一下連結會正確地將您帶到設定。">
佈景主題:Light Pink
註解小工具主要按鈕
註解小工具將主要按鈕色彩用於第一個(最右邊)動作
終端機
尋找符合項背景色彩
最後一個版本在終端機中實作了尋找功能,以在所有符合項周圍顯示邊框,但在支援動態變更儲存格背景之前,這是一個臨時解決方案。彩色背景現在是佈景主題在醒目提示符合項時的預設背景,整體體驗應與編輯器類似。
如果您是採用 terminal.findMatchBorder
或 terminal.findMatchHighlightBorder
的佈景主題作者,我們建議您移轉至 terminal.findMatchBackground
和 terminal.findMatchHighlightBackground
,如果這樣更適合佈景主題或有助於對比。
對比度和最小對比度比率的改進
尋找符合項背景工作在終端機如何與背景和前景色彩搭配使用方面增加了許多彈性。因此,終端機的對比度進行了改進,使終端機視覺效果更接近編輯器。此外,現在還有最小對比度比率功能,可動態變更文字的前景以協助提高可見度。
-
如果未滿足對比度,亮度現在將朝另一個方向移動。例如,如果淺灰色背景上的深灰色文字未使用純黑色 (#_000000) 滿足對比度,則色彩也會嘗試朝白色移動,並使用最符合所需對比度比率的值。
-
當停用 GPU 加速時,選取範圍現在會在文字下方繪製,並支援不透明色彩。先前,這必須是部分透明的,並且會沖淡前景色彩。由於此變更,選取色彩現在使用與編輯器中相同的色彩。
-
Nerd 字型 符號現在應套用最小對比度比率,以與附近的文字混合,而 Powerline 符號和方塊繪圖字元將 不會 套用最小對比度比率,因為它們通常與沒有任何前景字元的反轉儲存格相鄰。
-
佈景主題現在可以指定固定的選取範圍前景色彩,以在高度對比佈景主題中預設使用。
-
修正了一些錯誤,使產生的前景色彩更正確。
提醒您,如果您希望使用原始色彩,可以透過設定 "terminal.integrated.minimumContrastRatio": 1
來停用最小對比度比率。
工作
預設工作的 Glob 模式
預設組建和測試工作現在可以限定範圍,僅在作用中檔案符合檔案名稱 glob 模式時才為「預設」
{
"version": "2.0.0",
"tasks": [
{
"label": "echo txt",
"type": "shell",
"command": "echo TextFile",
"group": {
"kind": "build",
"isDefault": "**.txt" // This is a glob pattern which will only match when the active file has a .txt extension.
}
},
{
"label": "echo js",
"type": "shell",
"command": "echo JavascriptFile",
"group": {
"kind": "build",
"isDefault": "**.js" // This is a glob pattern which will only match when the active file has a .js extension.
},
}
]
}
原始檔控制
Git 擴充功能進行了一些更新,與我們新的提取要求流程一致。
Git:分支前置詞
為了使建立新分支的過程更順暢,有一個新的設定 git.branchPrefix
,指定在建立新分支時要用作前置詞的字串。
Git:分支名稱產生
新的設定 git.branchRandomName.enable
將使 VS Code 在每次建立新分支時建議隨機分支名稱。隨機名稱是從字典產生的,您可以透過 git.branchRandomName.dictionary
設定來控制字典。支援的字典包括:adjectives
(預設)、animals
(預設)、colors
和 numbers
。
Git:分支保護
使用新的 git.branchProtection
設定,您可以設定要保護的特定分支。VS Code 將避免直接在受保護的分支上認可,並將提供您建立新分支以認可的機會。您可以使用 git.branchProtectionPrompt
設定微調此行為。
GitHub:提取要求範本支援
GitHub 擴充功能現在了解提取要求範本,並將在從新分支的儲存庫建立 PR 時將其用作基礎。
筆記本
儲存格顯示變更
我們已調整了在幾種情況下如何顯示視窗外的儲存格。
當您在「大綱」檢視中按一下儲存格時,如果該儲存格在視窗外,筆記本現在將捲動以在大約視窗頂部 1/5 處顯示該儲存格。這與文字編輯器中「大綱」的行為一致。
當游標在儲存格編輯器中時,您可以將游標移動到編輯器的第一行或最後一行之後,以將其移動到下一個儲存格編輯器中。現在,當將游標移動到其儲存格超出視窗的編輯器中時,筆記本將僅捲動足夠的距離以顯示編輯器中的該行,而不是向上跳躍以在視窗中間顯示儲存格。
尋找和取代支援從游標/選取範圍植入查詢
筆記本編輯器中的「尋找」控制項現在支援從編輯器選取範圍植入搜尋字串。此行為由編輯器設定 editor.find.seedSearchStringFromSelection
控制。
偵錯
執行和偵錯,無需 launch.json
當您未設定 launch.json
設定檔並按下 F5
,或在「偵錯」檢視中選取 執行和偵錯 按鈕時,VS Code 會根據目前作用中檔案中的程式設計語言選取偵錯工具。如果您沒有開啟檔案,系統會詢問您要使用哪個偵錯工具。這種體驗可能有點令人困惑,因此我們進行了一些改進。
如果擴充功能在您嘗試開始偵錯之前已啟用,則該擴充功能的偵錯工具將排序到最上方。例如,當擴充功能先前透過執行該擴充功能的命令、開啟啟用該擴充功能的語言的檔案,或透過您的工作區符合的 workspaceContains
模式啟用時,這可能很有用。如果您在本工作階段中使用過偵錯工具,它也會排序到最上方。
Chrome/Edge 偵錯工具已重新命名為 Web 應用程式 (Chrome) 和 Web 應用程式 (Edge),以盡量避免與其他偵錯工具(例如 Flutter 擴充功能)混淆,這些偵錯工具也會在瀏覽器中執行應用程式。
語言
TypeScript 4.7
VS Code 現在捆綁了 TypeScript 4.7.3。這個主要的 TypeScript 版本帶來了新的語言功能,包括 改進的控制流程分析 和對 Node.js 中的 ECMAScript 模組支援 的支援。它還包括新的工具功能,並修正了許多重要的錯誤!
前往原始碼定義
VS Code 最長期存在且投票最多的功能要求之一是讓 VS Code 從外部程式庫導覽至函式和符號的 JavaScript 實作。目前,前往定義 會跳到定義目標函式或符號類型的類型定義檔案(.d.ts
檔案)。如果您需要檢查這些符號的類型或文件,這很有用,但會隱藏程式碼的實際實作。目前的行為也讓許多可能不了解 .d.ts
中 TypeScript 類型的 JavaScript 使用者感到困惑。
雖然將 前往定義 變更為導覽至符號的 JavaScript 實作聽起來很簡單,但此功能要求已開啟這麼長時間是有原因的。JavaScript(尤其是許多程式庫隨附的已編譯 JavaScript)比 .d.ts
更難分析。嘗試分析 node_modules
下的所有 JavaScript 程式碼既緩慢又會大幅增加記憶體使用量。VS Code IntelliSense 引擎也無法理解許多 JavaScript 模式。
這就是新的 前往原始碼定義 命令的用武之地。當您從編輯器內容功能表或命令面板執行此命令時,TypeScript 將嘗試追蹤符號的 JavaScript 實作並導覽至它。這可能需要幾秒鐘,我們可能並不總是獲得正確的結果,但在許多情況下它應該很有用。
我們正在積極改進此功能,因此請在您的程式碼庫中試用它,並分享您的意見反應。
物件方法程式碼片段
物件方法程式碼片段可協助您快速將方法新增至實作給定介面的物件常值
在物件常值內部時,您應該會看到每個可能方法的兩個建議:一個僅插入方法名稱,另一個插入方法的完整簽章。您也可以透過設定 "typescript.suggest.classMemberSnippets.enabled": false
或 "javascript.suggest.classMemberSnippets.enabled": false
完全停用物件方法程式碼片段。
群組感知組織匯入
JavaScript 和 TypeScript 的 組織匯入 命令可讓您快速清理匯入清單。執行時,它會移除未使用的匯入,並按字母順序排序匯入。
但是,某些程式碼庫喜歡對其匯入的組織方式進行一定程度的手動控制。將外部匯入與內部匯入分組是其中一個最常見的範例
// local code
import * as bbb from './bbb';
import * as ccc from './ccc';
import * as aaa from './aaa';
// built-ins
import * as path from 'path';
import * as child_process from 'child_process';
import * as fs from 'fs';
// some code...
在舊版 VS Code 中,在此處執行 組織匯入 會導致以下結果
// local code
import * as child_process from 'child_process';
import * as fs from 'fs';
// built-ins
import * as path from 'path';
import * as aaa from './aaa';
import * as bbb from './bbb';
import * as ccc from './ccc';
// some code...
糟糕!發生這種情況是因為所有匯入都按字母順序排序,而且 VS Code 甚至嘗試在這樣做時保留註解和換行符號。
但是,使用 TypeScript 4.7,組織匯入 現在是群組感知的。在上述程式碼上執行它看起來更像您所期望的
// local code
import * as aaa from './aaa';
import * as bbb from './bbb';
import * as ccc from './ccc';
// built-ins
import * as child_process from 'child_process';
import * as fs from 'fs';
import * as path from 'path';
// some code...
請注意,匯入現在已排序,同時仍保留在其群組中。好多了!
在隱含專案中啟用嚴格 null 檢查
嚴格 null 檢查 在 JavaScript 和 TypeScript 的隱含專案中預設啟用。這應會產生更準確的 IntelliSense 和改進的類型檢查,可以捕獲常見的程式設計錯誤。
此新行為僅適用於不屬於 jsconfig
或 tsconfig
專案的任何檔案。您可以透過設定以下項目來停用它:"js/ts.implicitProjectConfig.strictNullChecks": false
。對於屬於 jsconfig
或 tsconfig
的檔案,您仍然需要在設定檔中啟用嚴格 null 檢查。
Markdown 參考連結的「前往定義」
您現在可以在 Markdown 檔案中的參考連結上使用 前往定義。這將從參考跳到目前檔案中的連結定義。
擴充的 JSON Schema 支援
內建 JSON 語言服務改進了對 JSON Schema Draft 2019-09 和 JSON Schema Draft 2020-12 的支援。當使用此類結構描述時,不再顯示警告。
仍有一些功能未完全支援。當結構描述使用這些功能時,會顯示警告。不支援的屬性包括
- 具有 $id 的子結構描述
- $recursiveRef/錨點 (Draft 2019-09)
- $dynamicRef/錨點 (Draft 2020-12)
適用於 Web 的 VS Code
核心本地化支援
我們推出了適用於 Web 的 VS Code 的初始本地化支援。VS Code 在世界各地使用,對於許多使用者來說,英文不是他們的第一語言(或他們熟悉的語言!)。多年來,VS Code 使用者一直在安裝 Marketplace 的語言套件,以便以英文以外的語言使用 VS Code。對於適用於 Web 的 VS Code,我們決定採用不同的方法,這種方法更符合今天的 Web 運作方式。
對於將瀏覽器設定為我們核心支援語言之一的使用者,vscode.dev 將自動套用該語言的翻譯。我們支援的語言記錄在 vscode-loc 儲存庫中。
例如,若要在 Microsoft Edge 中設定顯示語言,您可以使用 設定 > 語言
設定完成後,當您前往 vscode.dev(或 insiders.vscode.dev)時,它將以德文顯示
佈景主題:Panda Theme
在接下來的幾個月中,我們將為擴充功能啟用本地化(包括 VS Code 隨附的擴充功能和未隨附的擴充功能),以便擴充功能作者也可以支援非英語使用者。敬請期待!
遠端儲存庫
當使用 遠端儲存庫 > 繼續在...上工作 命令在本機複製 GitHub 或 Azure Repos 儲存庫並在桌面 VS Code 中開啟它時,您現在可以設定 remoteHub.gitProtocol
以始終使用 http
或 ssh
URL 複製。
開發容器規格
Microsoft 和 GitHub 的開發容器團隊繼續積極開發新的 Dev Container Specification,而此反覆運算有幾個令人興奮的重點。
參考實作
我們發行了一個開放原始碼命令列介面 (CLI) 作為規格的參考實作。CLI 從 devcontainer.json
建置並啟動開發容器,它可以直接使用或整合到產品體驗中。
CLI 在新的 devcontainers/cli 儲存庫中提供。您可以從其 README 了解如何開始使用,並在此 部落格文章 中閱讀更多資訊。
CLI 正在積極開發中,並將繼續發展以更好地支援更多案例,例如更好地支援個別使用者。我們很樂意聽到您一路上的意見反應,因此我們開啟了一個問題,專門用於收集有關 CLI 的意見反應,並歡迎儲存庫中的其他問題和 PR。
CI 中的開發容器
GitHub Action 和 Azure DevOps 工作可用於在持續整合 (CI) 組建中執行儲存庫的開發容器。這可讓您重複使用用於本機開發的相同設定,以便在 CI 中建置和測試您的程式碼。請參閱 devcontainers/ci README 以取得更多詳細資訊。
GitHub Action 的範例用法
- name: Build and run dev container task
uses: devcontainers/ci@v0.2
with:
imageName: ghcr.io/example/example-devcontainer
runCmd: make ci-build
Azure DevOps 工作的範例用法
- task: DevcontainersCI@0
inputs:
imageName: 'yourregistry.azurecr.io/example-dev-container'
runCmd: 'make ci-build'
sourceBranchFilterForPush: refs/heads/main
規格
規格的積極開發仍在繼續,我們已在 devcontainers/spec 儲存庫中發布了初始版本。
與 CLI 一樣,請繼續關注進一步的更新和進度,我們很樂意聽到您的意見反應。
延伸閱讀
您可以在 https://containers.dev 閱讀有關開發容器和規格的所有資訊。
擴充功能貢獻
Python
啟動時沒有解譯器探索
Python 擴充功能現在僅在以下情況下自動觸發探索
- 使用 Python:選取解譯器 命令以選擇不同的解譯器。
- 第一次開啟特定範圍(工作區或全域)。
- 未安裝 Python。
由於探索不會在啟動時自動觸發,因此會導致立即載入,並加快語言伺服器等其他功能的啟動速度。但是,如果已安裝/啟用 Jupyter 擴充功能,則探索仍會在啟動時由 Jupyter 觸發。
啟用本地化
Python 擴充功能現在支援 VS Code 支援的所有語言的翻譯。我們已更新我們取得命令、通知、標題等翻譯的方式,使用 vscode-nls。這些翻譯由本地化團隊維護,以確保它們是最新的且正確。
Jupyter
Web 擴充功能
我們在 Web 版本的 Jupyter 擴充功能中支援更多核心功能方面取得了進展。
本月,以下功能已移植到 Web 擴充功能
- https 支援
- 核心完成
- ipywidgets
- 筆記本偵錯
- 變數檢視
- 匯出
- 互動式視窗
如果您想試用此功能,請從本機電腦啟動 Jupyter,並使用
jupyter notebook --no-browser --NotebookApp.allow_origin_pat=https://.*\.vscode-cdn\.net
然後使用 vscode.dev 中的命令 Jupyter:指定 Jupyter 伺服器以進行連線 連線到它。
如需更多資訊(和評論),請參閱此討論項目。
遠端開發
遠端開發擴充功能的工作仍在繼續,這可讓您使用容器、遠端電腦或 Windows Linux 子系統 (WSL) 作為全功能開發環境。
您可以在遠端開發發行說明中了解新的擴充功能功能和錯誤修正。
GitHub 提取要求和問題
GitHub 提取要求和問題擴充功能取得了更多進展,這可讓您處理、建立和管理提取要求和問題。此版本的重點包括
- 建立提取要求 檢視中的自動合併核取方塊
查看擴充功能 0.44.0 版本的變更記錄,以查看其他重點。
遠端儲存庫擴充功能
GitHub 儲存庫和 Azure Repos 擴充功能都支援 VS Code 支援的所有語言的翻譯。
預覽功能
Markdown 連結驗證
使用 Markdown 時,很容易錯誤地新增無效的檔案連結或影像參考。也許您忘記了檔案名稱使用 -
(破折號)而不是 _
(底線),或者您連結到的檔案已移動到不同的目錄。通常,您只有在檢視 Markdown 預覽或甚至發布後才會發現這些錯誤。VS Code 新的實驗性 Markdown 連結驗證可以幫助捕獲這些錯誤。
透過連結驗證,VS Code 將分析 Markdown 連結到標題、影像和其他本機檔案的連結。無效的連結將報告為警告或錯誤。
VS Code 甚至可以捕獲其他 Markdown 檔案中特定標題的無效連結!
連結驗證預設為關閉。您可以透過設定 "markdown.experimental.validate.enabled": true
來試用連結驗證。
您可以使用一些設定來自訂連結驗證
-
markdown.experimental.validate.fileLinks.enabled
- 啟用/停用驗證本機檔案的連結:[link](/path/to/file.md)
-
markdown.experimental.validate.headerLinks.enabled
- 啟用/停用驗證目前檔案中標題的連結:[link](#_some-header)
-
markdown.experimental.validate.referenceLinks.enabled
- 啟用/停用驗證參考連結:[link][ref]
。 -
markdown.experimental.validate.ignoreLinks
- 跳過驗證的連結清單。如果您連結到磁碟上不存在但在 Markdown 發布後存在的檔案,這會很有用。
請告訴我們您對新功能的想法!
貼上檔案以插入 Markdown 連結
我們新增了實驗性支援,可貼上以在 Markdown 中插入影像或檔案連結。
這需要同時啟用 markdown.experimental.editor.pasteLinks.enabled
和 "editor.experimental.pasteActions.enabled"
。您目前可以從 VS Code 檔案總管複製檔案。貼上影像檔案會插入影像參考,而貼上一般文字檔會插入這些檔案的連結。
終端機 Shell 整合
Shell 整合(透過 terminal.integrated.shellIntegration.enabled
設定啟用)和命令裝飾在此反覆運算中已進行潤飾和改進。
一些更新包括
- 146377 持續 Shell 狀態,以便
bash-git-prompt
和其他程式正常運作 - 148635 允許為
zsh
使用自訂ZDOTDIR
- 145801 修正裝飾在速度較慢的電腦上失去同步
- 146873 改進
bash
中現有偵錯陷阱的處理 - 148839 使用 運作方式? 命令和索引標籤懸停中的啟動狀態來潤飾訊息
- 151223 清除緩衝區後,確保正確追蹤命令
Windows 上的視窗控制項覆蓋
我們採用了 Electron 提供的 API 來支援 Windows 上的 視窗控制項覆蓋。此變更面向使用者的主要好處是存取 Windows 11 中的 貼齊版面配置 功能。由於某些持續存在的問題,視窗控制項覆蓋預設為關閉,但您可以使用實驗性設定 window.experimental.windowControlsOverlay.enabled
開啟它們。
命令中心
我們正在新增命令中心 - 一種更簡單的方式來觸發檔案、命令等的快速選取。
可以透過 window.experimental.commandCenter
設定啟用此功能,並讓我們知道您的想法。
合併編輯器
我們已開始致力於改善合併體驗。目前仍處於早期階段,我們尚未準備好收集意見反應,但您可以透過 git.experimental.mergeEditor
試用它。啟用此功能後,具有合併衝突的檔案會在新的合併編輯器中開啟,以簡化衝突解決。
我們將繼續致力於此。使用 Insiders 來關注我們的進度。我們衷心感謝 Mingpan 和我們在 Google 的朋友,他們正在協助我們完成這項工作。❤️
擴充功能撰寫
內嵌完成最終化
我們已完成「Inline Completions API」的最終定案。此 API 允許擴充功能提供與建議小工具分離的行內完成建議。行內完成建議的呈現方式如同已被接受,但以灰色顯示。使用者可以使用 Tab
鍵在建議之間循環切換並接受建議。使用行內完成建議的擴充功能範例是 GitHub Copilot。更多資訊請參考 vscode.d.ts
檔案,API 的進入點為 languages.registerInlineCompletionItemProvider
。
InputBox 驗證訊息嚴重性最終定案
我們的 InputBox API(透過 window.showInputBox
和 window.createInputBox
)在使用者輸入驗證中提供嚴重性分級的功能已最終定案。
例如,如果您想根據使用者的輸入顯示資訊訊息,您的驗證訊息可以回傳
{
message: 'this is an info message';
severity: InputBoxValidationSeverity.Info;
}
看起來會像這樣
Notebook Editor API
新的 Notebook Editor API 引入了新的 NotebookEditor
類型,它與 TextEditor
類似,但適用於 筆記本 而非一般的文字編輯器。
const editor = vscode.window.activeNotebookEditor;
if (editor) {
// Access the underlying notebook document associated with the editor
console.log(editor.notebook.uri);
// Change the selection in the current notebook
editor.selection = new vscode.NotebookRange(1, 3);
}
您可以使用 window.activeNotebookEditor
來取得目前的筆記本編輯器,以及諸如 window.onDidChangeActiveNotebookEditor
等事件來觀察使用者何時切換到新的筆記本編輯器。
根據時間軸檢視啟用擴充功能
新增了一個啟用事件,用於在時間軸檢視可見時觸發。任何擴充功能都可以使用此事件 onView:timeline
,但對於實作建議的 Timeline
API 的擴充功能最為有用。
UX 指南
擴充功能作者的 UX 指南已更新和擴充,涵蓋更多 VS Code 使用者介面元素。
修訂後的 總覽 頁面逐步介紹 VS Code UI,以視覺化的方式導覽介面和常見的 UI 元素。
相關指南、API 參考和擴充功能範例的連結已新增到每個區域的專屬頁面。此外,指南中的所有範例圖片都已更新,以展示最新版本的 UI。
您現在可以閱讀關於擴充功能在新增或貢獻以下 UI 元素時,建議的「應做事項」和「不應做事項」
擴充功能贊助
在這個里程碑中,我們在擴充功能的 package.json
中引入了 sponsor
欄位,以允許擴充功能選擇加入贊助。sponsor
物件有一個 url
欄位,用於擴充功能作者的贊助連結。例如
"sponsor": {
"url": "https://github.com/sponsors/nvaccess"
}
如果擴充功能選擇加入此功能,VS Code 將在「擴充功能」檢視的「詳細資訊」頁面中呈現一個 贊助 按鈕,如上方「贊助擴充功能」章節所示。
注意: 請務必使用最新的 vsce 命令列工具(>=2.9.1
)來發佈已啟用贊助功能的擴充功能。
建議的 API
每個里程碑都帶有新的建議 API,擴充功能作者可以試用它們。一如既往,我們希望收到您的回饋。以下是試用建議 API 的步驟
- 找到您想試用的提案,並將其名稱新增到
package.json#enabledApiProposals
中。 - 使用最新的 vscode-dts 並執行
vscode-dts dev
。它會將對應的d.ts
檔案下載到您的工作區。 - 現在您可以針對該提案進行程式設計。
您無法發佈使用建議 API 的擴充功能。下一個版本中可能會出現重大變更,我們絕不希望破壞現有的擴充功能。
從 DataTransfer 讀取檔案
新的 dataTransferFiles
API 提案允許擴充功能從 vscode.DataTransfer
物件中讀取檔案。DataTransfer
類型被樹狀結構拖放 API,以及拖放到編輯器和複製貼上 API 提案所使用。
export class TestViewDragAndDrop implements vscode.TreeDataProvider<Node>, vscode.TreeDragAndDropController<Node> {
...
public async handleDrop(target: Node | undefined, sources: vscode.DataTransfer, token: vscode.CancellationToken): Promise<void> {
// Get a list of all files
const files: vscode.DataTransferFile[] = [];
sources.forEach((item) => {
const file = item.asFile();
if (file) {
files.push(file);
}
});
const decoder = new TextDecoder();
// Print out the names and first 100 characters of the file
for (const file of files) {
const data = await file.data();
const text = decoder.decode(data);
const fileContentsPreview = text.slice(0, 100);
console.log(file.name + ' — ' + fileContentsPreview + '\n');
}
...
}
}
檔案資料傳輸項目目前僅在它們來自 VS Code 外部時(例如,當您從桌面拖放到樹狀檢視或編輯器中時)才會新增到 DataTransfer
。
複製貼上 API
新的 documentPaste
API 提案允許擴充功能掛鉤到文字編輯器內部的複製和貼上操作。這可以用於修改貼上時插入的文字。您的擴充功能也可以在複製文字時儲存中繼資料,並在貼上時使用此中繼資料(例如,在兩個程式碼檔案之間貼上時一併帶入 import 語句)。
文件貼上擴充功能範例 展示了此 API 的實際應用
/**
* Provider that maintains a count of the number of times it has copied text.
*/
class CopyCountPasteEditProvider implements vscode.DocumentPasteEditProvider {
private readonly countMimeTypes = 'application/vnd.code.copydemo-copy-count';
private count = 0;
prepareDocumentPaste(
_document: vscode.TextDocument,
_range: vscode.Range,
dataTransfer: vscode.DataTransfer,
_token: vscode.CancellationToken
): void | Thenable<void> {
dataTransfer.set(this.countMimeTypes, new vscode.DataTransferItem(this.count++));
}
async provideDocumentPasteEdits(
_document: vscode.TextDocument,
range: vscode.Range,
dataTransfer: vscode.DataTransfer,
token: vscode.CancellationToken
) {
const countDataTransferItem = dataTransfer.get(this.countMimeTypes);
if (!countDataTransferItem) {
return undefined;
}
const textDataTransferItem = dataTransfer.get('text/plain') ?? dataTransfer.get('text');
if (!textDataTransferItem) {
return undefined;
}
const count = await countDataTransferItem.asString();
const text = await textDataTransferItem.asString();
// Build a snippet to insert
const snippet = new vscode.SnippetString();
snippet.appendText(`(copy #${count}) ${text}`);
return new vscode.SnippetTextEdit(range, snippet);
}
}
vscode.languages.registerDocumentPasteEditProvider(
{ language: 'markdown' },
new CopyCountPasteEditProvider()
);
新的 Notebook Workspace 編輯提案
新的 notebookWorkspaceEdit
API 提案允許擴充功能編輯筆記本的內容。它取代了先前的 notebookEditorEdit
提案。
透過此提案,您可以建立工作區編輯,以在筆記本中插入、取代或修改儲存格
const currentNotebook = vscode.window.activeNotebookEditor?.notebook;
if (currentNotebook) {
const edit = new vscode.WorkspaceEdit();
edit.set(
currentNotebook.uri,
vscode.NotebookEdit.insertCells(/* index*/ 1, [
// ... new notebook cell data
])
);
await vscode.workspace.applyEdit(edit);
}
工程
使用 Pull Request
我們已不再直接將變更推送至 vscode 儲存庫的 main
分支,現在完全使用 Pull Request (PR) 將所有變更推送至 VS Code。我們要求每個 PR 至少獲得另一位團隊成員的批准。利用這一點,我們現在也要求在 PR 可以合併之前,必須通過一些基本檢查。這些檢查包括 TypeScript 編譯、格式規則、單元測試和整合測試等任務,通常不會超過 10 分鐘。切換到此流程減少了我們的 Insiders 版本因程式設計錯誤而損壞的次數。
VS Code OSS 建置
我們有一個新的公開 Code OSS 建置,它重複使用與我們的生產建置相同的建置定義。此建置現在在每個 PR 上都在 30 分鐘內完成,我們計劃繼續投入資源加速它。
文件
更新的版本控制影片
重新製作了 搭配 Visual Studio 使用 Git 的入門影片,以協助您開始使用 VS Code 內建的 Git 整合功能。
您也可以在 VS Code YouTube 頻道上找到其他精彩影片。
vscode.dev 在 code.visualstudio.com 上
想使用 VS Code for the Web 但忘記了網址?vscode.dev 現在顯著地顯示在 VS Code 下載 頁面上,讓您可以快速開始在瀏覽器中執行 VS Code。
值得注意的修正
感謝您
最後但同樣重要的是,衷心感謝 VS Code 的貢獻者。
Web 擴充功能
為啟用以 Web 擴充功能 形式執行程式碼的擴充功能作者(以下列表為 2022 年 5 月 2 日至 6 月 6 日期間)
- Pipeline Editor (Alexey Volkov)
- Markdown Base64 Image ID (amoxuk)
- Apache Daffodil VS Code Extension (Apache Software Foundation)
- Web Search (Ben Rogers)
- CloudStudio.coding (CloudStudio)
- Screenshot Clipboard (Darren Daniel Day)
- Galaxy Workflows (davelopez)
- React Snippets (dotkiro)
- Draw (hall)
- Blogging tool (Huka)
- Katalon Runner (Katalon Studioz)
- zzzGCS-Uploader (KillerBees)
- WhatTheCommit (Lasse Gaardsholt)
- TEI Japanese Editor (ldas)
- TypeScript Error Translator (Matt Pocock)
- Mintlify (Mintlify)
- Play DJMAX (minwook-shin)
- Sciter JS (MustafaHi)
- NewWeb (newsearchwebtesting)
- Loop Development Kit (Olive AI)
- Chewbacca (Otter)
- Grammarly (Rahul Kadyan)
- Reflame (Reflame)
- SAS (SAS Institute Inc.)
- vscode-solidity (sevillal)
- Slint (Nightly) (Slint)
- Markdown Images (Steven Gourley)
- Smart Sort (Suguru Yamamoto)
- fiber-ifttt-starlark (t-codespaces)
- Markdown Preview Style (Beta) (TakumiI)
- TATEditor for VS Code (TATEditor)
- kodeine (tored)
- Vue Language Features (Volar) (Vue)
- Watermelon (WatermelonTools)
- todoist (Waymondo)
- Arrange Selection (Wupb)
- Transient Emacs (yasuyuky)
- Go to Next Error (yy0931)
- Extra Commands (zardoy)
Issue tracking
對我們的 Issue tracking 的貢獻
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- ArturoDent (@ArturoDent)
- Simon Chan (@yume-chan)
Pull requests
對 vscode
的貢獻
- @a-stewart (Anthony Stewart):修復 webview 定位錯誤的變通方案 PR #137506
- @aifreedom (Song Xie)
- 以正確的地區設定格式化日期字串 PR #150133
- 修正日誌字串中 "synchronizing" 的錯字 PR #150236
- @AlbertHilb:將一個共用的
macros
物件傳遞到每個 katex renderer 的呼叫中 PR #148006 - @andrewbranch (Andrew Branch)
- [typescript-language-features] 將
flags
新增至 completions telemetry PR #148313 - [typescript-language-features] 字串完成建議沒有 commit characters PR #148597
- [typescript-language-features] 將
- @bl-nero (Bartosz Leper):修正反組譯檢視中的無限迴圈 PR #148556
- @CGNonofr (Loïc Mangeonjean)
- 在 monaco editor 上新增高對比淺色主題 PR #148249
- 在 monaco api 中新增編輯器監控方法 PR #148777
- @dlech (David Lechner):允許 ICodeEditor.restoreViewState() 中為 null PR #146866
- @eugenesimakin (Eugene):為建議小工具繼承 editor.letterSpacing (修正 #125622) PR #148283
- @gjsjohnmurray (John Murray):在 Git SCM 檢視中的檔案 context menu 新增 "Open Containing Folder" 等選項 PR #149150
- @holazz (zz):將 "pnpm-lock.yaml" 新增至 "package.json" 的子模式 PR #146869
- @ilumer (ilumer):修正 build/npm/preinstall.js node 版本檢查 PR #150547
- @jasonwilliams (Jason Williams):在 tasks 上啟用 globs,否則回退到預設值 - 修正 #88106 PR #141230
- @jeanp413 (Jean Pierre)
- 為 markdown 連結啟用 go to definition PR #148017
- 修正如果終端機在退出時未聚焦,則終端機分割寬度不會持久保存的問題 PR #149594
- @justanotheranonymoususer:將擴充功能輸出標籤新增至 url PR #150065
- @Lazyuki:在 monarchLexer 中檢查 maxTokenizationLineLength PR #145979
- @Long0x0:修正呈現空白字元時不正確的連字 PR #150349
- @MachineMitch21 (Mitch Schutt):編輯器拖放目標偵錯閾值正方形清理 PR #149570
- @Mingpan:[未完善的原型] Git 的三向合併 PR #150388
- @PF4Public:變更 extensions/markdown-math 中的相依語法 PR #149501
- @pksunkara (Pavan Kumar Sunkara):feat: inlay hints displayStyle PR #150118
- @prashantvc (Prashant Cholachagudda):將擴充功能搜尋文字長度新增至 telemetry PR #148785
- @quanzhuo (Quan Zhuo):在 javascript 中新增 newpromise snippets PR #148755
- @r3m0t (Tomer Chachamu):修正來自錯誤提供者的 access token 問題 PR #150473
- @Raymo111 (Raymond Li):修正錯字 PR #149509
- @remcohaszing (Remco Haszing):指定 tsconfig.tsbuildinfo 是 json PR #149065
- @robinkar (Robin Karlsson):接受 web 中 HTTP upgrade header 的大寫 PR #150961
- @roj1512 (Roj):處理建立 PR 時的多行 commit 訊息 PR #149426
- @ShenHongFei (沈鸿飞):除了 WebviewPanel 之外,也讓 WebviewView 支援 TypedArrays 的傳輸 PR #148429
- @susiwen8 (susiwen8):fix: 關閉
create fork
訊息會建立 fork PR #148438 - @weartist (Han):修正 #130527 PR #146710
- @wkillerud (William Killerud):為 SassDoc 文件新增 onEnterRule PR #150599
- @yhatt (Yuki Hattori):修正 #147936 PR #148503
對 vscode-extension-samples
的貢獻
- @KamasamaK:移除未使用的 enableProposedApi PR #609
對 vscode-generator-code
的貢獻
- @segevfiner (Segev Finer):從 vscode-webpack 範本中移除 $tslint-webpack-watch PR #346
對 vscode-html-languageservice
的貢獻
- @hahn-kev (Kevin Hahn):允許在資料提供者中指定 void elements PR #125
對 vscode-js-debug
的貢獻
- @ashgti (John Harrison):新增對 indexed source maps 的支援。 PR #1261
對 vscode-languageserver-node
的貢獻
- @d-biehl (Daniel Biehl):清理 DiagnosticRequestor 中的 diagnostics PR #976
- @DanTup (Danny Tuppeny)
- @heejaechang (Heejae Chang):確保取消訂閱檔案事件 PR #929
- @Vtec234 (Wojciech Nawrocki):fix: 當
showDocument
失敗時回傳false
PR #951
對 vscode-pull-request-github
的貢獻
- @jpspringall:Issue #3371 | 更新 getAuthSessionOptions 以處理 GitHub Enterprise AuthProvider 的情況 PR #3565
對 debug-adapter-protocol
的貢獻
- @apupier (Aurélien Pupier)
- @lemmy (Markus Alexander Kuppe):將 TLA+ 新增至 debug-adapter-protocols 列表 PR #267
對 language-server-protocol
的貢獻
- @asashour (Ahmed Ashour)
- @KamasamaK
- @michaelmesser (Michael Messer):更新 index.html 中的最新版本 PR #1478
- @pedro-w (Peter Hull):在檔案末尾新增換行符號 PR #1486