2022 年 5 月(版本 1.68)
更新 1.68.1:此更新解決了這些 問題。
下載:Windows:x64 Arm64 | Mac:通用版 Intel Apple 晶片 | Linux:deb rpm tarball Arm snap
歡迎使用 Visual Studio Code 2022 年 5 月版本。此版本中有許多更新,希望您喜歡,其中一些主要亮點包括
- 配置顯示語言 - 以其自身語言檢視已安裝和可用的語言包。
- 問題面板表格檢視 - 以表格形式檢視錯誤和警告,以便快速按其來源進行篩選。
- 已棄用擴充套件 - 瞭解擴充套件是否已棄用或應被替換。
- 擴充套件贊助 - 支援開發您最喜歡的擴充套件的開發者。
- 使用 .gitignore 隱藏資源管理器檔案 - 重用現有
.gitignore
以在資源管理器中隱藏檔案。 - 終端顏色和對比度增強 - 查詢匹配的背景色、最小對比度。
- Git 分支保護 - 分支保護直接在 VS Code 中可用。
- TypeScript 轉到源定義 - 直接跳轉到符號的 JavaScript 實現。
- Web 版 VS Code 本地化 - vscode.dev 現在與您選擇的瀏覽器語言匹配。
- 開發容器規範 - 瞭解不斷發展的開發容器規範。
- 預覽:Markdown 連結驗證 - 檢測到指向標題、圖片和檔案的損壞連結。
如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。
內測版:想盡快嘗試新功能?您可以下載每晚的內測版構建,並儘快嘗試最新的更新。
工作臺
配置顯示語言改進
“配置顯示語言”命令已重新整理,包括
- 該語言的名稱。
- “可用語言”部分,顯示您機器上未安裝的語言,選擇其中一種將自動安裝並應用該語言。
主題: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 隱藏資源管理器中的檔案
“檔案資源管理器”現在支援解析和隱藏被 .gitignore
檔案排除的檔案。這可以透過“資源管理器:排除 Git Ignore”(explorer.excludeGitIgnore
)設定啟用。此設定與 files.exclude
一起工作,以從資源管理器中隱藏不需要的檔案。
注意:目前,諸如 !package.json
之類的否定 glob 無法解析。
鎖定懸停位置
由於存在其他 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="在設定編輯器中搜索“font”一詞並選擇目錄中的終端類別後,顯示設定 terminal.integrated.fontFamily,其描述包含指向 editor.fontFamily 設定的連結。單擊該連結現在會正確地將您帶到該設定。">
主題:Light Pink
評論小元件主要按鈕
評論小元件將主按鈕顏色用於第一個(最右邊)操作
終端
查詢匹配的背景色
上個版本中,終端中的查詢功能實現為在所有匹配項周圍顯示邊框,但這只是一個臨時解決方案,直到可以動態更改單元格背景的支援成為可能。現在,彩色背景是主題突出顯示匹配項的預設設定,並且整體體驗應該與編輯器類似。
如果您是採用了 terminal.findMatchBorder
或 terminal.findMatchHighlightBorder
的主題作者,我們建議您遷移到 terminal.findMatchBackground
和 terminal.findMatchHighlightBackground
,如果這更適合主題或有助於對比度。
對比度和最小對比度改進
查詢匹配背景的工作為終端如何處理背景和前景顏色增加了更多的靈活性。因此,終端中的對比度得到了改進,使終端視覺效果更接近編輯器。此外,現在還有一個最小對比度功能,可以動態更改文字的前景以幫助提高可見性。
-
如果對比度不滿足,亮度現在會朝相反方向變化。例如,如果深灰色文字在淺灰色背景上與純黑色 (#000000) 的對比度不滿足,則顏色也會嘗試向白色移動,並使用最能滿足所需對比度值的值。
-
停用 GPU 加速後,現在在文字下方繪製選區並支援不透明顏色。以前,這必須是部分透明的,並且會沖淡前景顏色。由於此更改,選區顏色現在與編輯器中使用的顏色相同。
-
Nerd 字型符號現在應該應用最小對比度以與附近文字融合,而Powerline符號和框線字元將不應用最小對比度,因為它們通常與沒有任何前景字元的倒置單元格相鄰。
-
主題現在可以指定一個固定的選區前景顏色,在高對比度主題中預設使用。
-
修復了幾個錯誤,以使最終的前景顏色更正確。
提醒一下,如果您希望使用原始顏色,可以透過設定 "terminal.integrated.minimumContrastRatio": 1
來停用最小對比度。
任務
預設任務的全域性模式
現在,預設的構建和測試任務可以僅在活動檔案匹配檔名全域性模式時才設定為“預設”
{
"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 擴充套件現在理解拉取請求模板,並在從新 fork 的倉庫建立 PR 時將其用作基礎。
Notebook
單元格顯示更改
我們調整了在某些情況下如何顯示視口之外的單元格。
當您在“大綱”檢視中單擊一個單元格時,如果該單元格在視口之外,筆記本現在將滾動以在大約視口頂部 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
檔案)。如果您需要檢查這些符號的型別或文件,這很有用,但會隱藏程式碼的實際實現。當前行為還會混淆許多 JavaScript 使用者,他們可能不理解 .d.ts
中的 TypeScript 型別。
雖然將“轉到定義”更改為導航到符號的 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...
請注意,匯入現在已排序,同時仍保留在其組內。好多了!
隱式專案中啟用嚴格的空檢查
預設情況下,在 JavaScript 和 TypeScript 的隱式專案中都啟用了嚴格的空檢查。這應該會帶來更準確的 IntelliSense 和改進的型別檢查,從而可以捕獲常見的程式設計錯誤。
此新行為僅適用於不屬於 jsconfig
或 tsconfig
專案的任何檔案。您可以透過設定 "js/ts.implicitProjectConfig.strictNullChecks": false
來停用它。對於屬於 jsconfig
或 tsconfig
的檔案,您仍然需要在配置檔案中啟用嚴格的空檢查。
Markdown 引用連結的“轉到定義”
您現在可以在 Markdown 檔案中的引用連結上使用“轉到定義”。這將從引用跳轉到當前檔案中的連結定義。
擴充套件 JSON Schema 支援
內建的 JSON 語言服務已改進了對JSON Schema Draft 2019-09 和JSON Schema Draft 2020-12 的支援。當使用此類 schema 時,不再顯示警告。
仍然有一些功能沒有完全支援。當 schema 使用它們時,會顯示警告。不支援的屬性是
- 帶有 $id 的子模式
- $recursiveRef/Anchor (草案 2019-09)
- $dynamicRef/Anchor (草案 2020-12)
Web 版 VS Code
核心本地化支援
我們引入了 VS Code for Web 的初始本地化支援。VS Code 在世界各地使用,對於許多使用者來說,英語不是他們的母語(或者根本不熟悉!)。多年來,VS Code 使用者一直在安裝市場中的語言包,以便以非英語語言使用 VS Code。對於 VS Code for 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 開發容器團隊繼續積極開發新的開發容器規範,本次迭代有幾個令人興奮的亮點。
參考實現
我們釋出了一個開源命令列介面 (CLI) 作為規範的參考實現。CLI 從 devcontainer.json
構建並啟動一個開發容器,它可以直接使用,也可以整合到產品體驗中。
CLI 在新的devcontainers/cli 儲存庫中可用。您可以在其README 中瞭解如何入門,並在此部落格文章中閱讀更多資訊。
CLI 正在積極開發中,並將繼續發展以更好地支援更多場景,例如對個人使用者的更大支援。我們很樂意在此過程中聽取您的反饋,因此我們已開設了一個問題專門用於 CLI 的反饋,並歡迎在倉庫中提出更多問題和 PR。
CI 中的開發容器
GitHub Action 和 Azure DevOps Task 可用於在持續整合 (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 伺服器連線到它。
有關更多資訊(和評論),請參閱此討論項。
遠端開發
遠端開發擴充套件的工作仍在繼續,它允許您使用容器、遠端機器或 適用於 Linux 的 Windows 子系統 (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 的朋友們對這項工作的幫助。❤️
擴充套件創作
內聯補全定稿
我們已經最終確定了內聯補全 API。這允許擴充套件提供與建議小元件分離的內聯補全。內聯補全以灰色渲染,就好像它已被接受一樣。使用者可以使用 Tab
鍵迴圈瀏覽建議並接受它們。使用內聯補全的示例擴充套件是GitHub Copilot。更多資訊可以在 vscode.d.ts
檔案中找到,API 的入口點是languages.registerInlineCompletionItemProvider
。
輸入框驗證訊息嚴重性定稿
我們的 InputBox API(透過 window.showInputBox
和 window.createInputBox
)提供使用者輸入驗證中的嚴重性已最終確定。
例如,如果您想根據使用者的輸入向用戶顯示一條資訊訊息,您的驗證訊息可以返回
{
message: 'this is an info message';
severity: InputBoxValidationSeverity.Info;
}
看起來會是這樣
筆記本編輯器 API
新的筆記本編輯器 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 指南已更新和擴充套件,以涵蓋更多 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。一如既往,我們希望得到您的反饋。以下是嘗試提議 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 提案允許擴充套件掛鉤到文字編輯器中的複製和貼上。這可用於修改貼上時插入的文字。您的擴充套件還可以在複製文字時儲存元資料,並在貼上時使用此元資料(例如,在兩個程式碼檔案之間貼上時引入匯入)。
文件貼上擴充套件示例展示了此 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()
);
新的筆記本工作區編輯提案
新的 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);
}
工程
使用拉取請求
我們已不再直接將更改推送到 vscode 倉庫的 main
分支,而是現在專門使用拉取請求 (PR) 將所有更改推送到 VS Code。我們要求每個 PR 至少獲得另一位團隊成員的一次批准。利用這一點,我們現在還要求在合併 PR 之前透過一些基本檢查。這些任務包括 TypeScript 編譯、格式化規則、單元測試和整合測試,通常不超過 10 分鐘。切換到此流程減少了由於程式設計錯誤導致 Insiders 版本中斷的次數。
VS Code OSS 構建
我們有一個新的公共Code OSS 構建,它重用了與我們的生產構建相同的構建定義。此構建現在在每個 PR 上執行不到 30 分鐘,我們計劃繼續投入以加快速度。
文件
更新的版本控制影片
使用 Git 和 Visual Studio 介紹影片已重新制作,以幫助您開始使用 VS Code 中內建的 Git 整合。
您還可以在VS Code YouTube 頻道上找到其他精彩影片。
code.visualstudio.com 上的 vscode.dev
想使用 Web 版 VS Code 但忘記了 URL?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)
問題跟蹤
對我們問題跟蹤的貢獻
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- ArturoDent (@ArturoDent)
- Simon Chan (@yume-chan)
拉取請求
對 vscode
的貢獻
- @a-stewart (Anthony Stewart):解決 webview 定位錯誤的變通方案 PR #137506
- @aifreedom (宋謝)
- 使用正確的區域設定格式化日期字串 PR #150133
- 修復日誌字串中“synchronizing”的拼寫錯誤 PR #150236
- @AlbertHilb:將一個共享的
macros
物件傳遞給每次呼叫 katex 渲染器 PR #148006 - @andrewbranch (Andrew Branch)
- [typescript-language-features] 為補全遙測新增
flags
PR #148313 - [typescript-language-features] 字串補全無提交字元 PR #148597
- [typescript-language-features] 為補全遙測新增
- @bl-nero (Bartosz Leper):修復反彙編檢視中的無限迴圈 PR #148556
- @CGNonofr (Loïc Mangeonjean)
- 在 monaco 編輯器上新增高對比度淺色主題 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 檢視中的檔案上下文選單 PR #149150
- @holazz (zz):將“pnpm-lock.yaml”新增到“package.json”的子模式 PR #146869
- @ilumer (ilumer):修復 build/npm/preinstall.js 節點版本檢查 PR #150547
- @jasonwilliams (Jason Williams):在任務上啟用 glob,否則回退到預設值 - 修復 #88106 PR #141230
- @jeanp413 (Jean Pierre)
- 啟用 Markdown 連結的轉到定義 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: 嵌入提示 displayStyle PR #150118
- @prashantvc (Prashant Cholachagudda):添加了擴充套件搜尋文字長度到遙測 PR #148785
- @quanzhuo (Quan Zhuo):在 JavaScript 中新增 newpromise 程式碼片段 PR #148755
- @r3m0t (Tomer Chachamu):修復訪問令牌來自錯誤提供程式的問題 PR #150473
- @Raymo111 (Raymond Li):修復拼寫錯誤 PR #149509
- @remcohaszing (Remco Haszing):指定 tsconfig.tsbuildinfo 為 json PR #149065
- @robinkar (Robin Karlsson):在 Web 中接受 HTTP 升級標頭中的大寫 PR #150961
- @roj1512 (Roj):處理建立 PR 時的多行提交訊息 PR #149426
- @ShenHongFei (沈鴻飛):除了 WebviewPanel,讓 WebviewView 也支援 TypedArrays 的傳輸 PR #148429
- @susiwen8 (susiwen8):修復:關閉
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):允許在資料提供器中指定空元素 PR #125
對 vscode-js-debug
的貢獻
- @ashgti (John Harrison):新增對索引源對映的支援。 PR #1261
對 vscode-languageserver-node
的貢獻
- @d-biehl (Daniel Biehl):清理 DiagnosticRequestor 中的診斷 PR #976
- @DanTup (Danny Tuppeny)
- @heejaechang (Heejae Chang):確保取消訂閱檔案事件 PR #929
- @Vtec234 (Wojciech Nawrocki):修復:當
showDocument
失敗時返回false
PR #951
對 vscode-pull-request-github
的貢獻
- @jpspringall:問題 #3371 | 在 GitHub Enterprise AuthProvider 的情況下更新 getAuthSessionOptions 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