2021 年 6 月(版本 1.58)
更新 1.58.1:此更新解決了這些安全問題。
更新 1.58.2:此更新解決了這些問題。
下載:Windows:x64 Arm64 | Mac:通用 Intel Apple 晶片 | Linux:deb rpm tarball Arm snap
歡迎使用 Visual Studio Code 2021 年 6 月版本。此版本有許多更新,我們希望您會喜歡,其中一些重點包括:
- 在編輯器區域中的終端 - 在編輯器區域中建立或移動終端。
- 工作區信任 - 快速自定義工作區信任設定,停用受限模式橫幅。
- 編輯器捲軸自定義 - 設定捲軸可見性和寬度,點選導航行為。
- Markdown 預覽 KaTeX 支援 - Markdown 預覽中的數學支援。
- 設定編輯器改進 - 支援多個複選框和列舉下拉列表。
- 記住每個檔案選擇的環境 - 偵錯程式會記住您上次選擇的環境。
- Jupyter 互動式視窗 - 直接在互動式視窗中執行 Jupyter 程式碼。
- Jupyter notebook 除錯 - 在 VS Code 中除錯 Jupyter notebook 程式碼。
- 資料科學教程 - 瞭解 Jupyter Notebooks、PyTorch 等。
如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。
請於太平洋時間 7 月 13 日星期二上午 8 點(倫敦時間下午 4 點)加入 VS Code 團隊直播,觀看此版本新功能的演示,並向我們即時提問。
內測版:想盡快嘗試新功能?您可以下載每晚的內測版構建,並儘快嘗試最新的更新。
工作臺
工作區信任
工作區信任功能是 1.57 版本中引入的一項重大更改,我們認為即使開發者不熟悉程式碼源,能夠安全地瀏覽程式碼也是非常重要的。在這個里程碑中,我們一直在吸收客戶反饋,並專注於修復問題和跟進建議。
為了幫助使用者發現可以自定義工作區信任的使用者設定,工作區信任編輯器的標題中有一個新的配置您的設定操作。此操作將開啟按 @tag:workspaceTrust 篩選的設定編輯器。

說到設定,有一個新設定可以配置何時顯示指示當前視窗處於受限模式的橫幅。與 security.workspace.trust.startupPrompt 設定類似,新的 security.workspace.trust.banner 允許您在熟悉工作區信任功能後停用橫幅,並且不需要提醒您正在受限模式下工作。預設情況下,此橫幅每個工作區顯示一次,直到被關閉 ("untilDismissed")。顯示受限模式橫幅的其他選項是 "always" 和 "never"。
您可以在最近的工作區信任部落格文章中瞭解有關工作區信任原理和開發的更多資訊。這篇文章解釋了受限模式如何幫助保護您免受意外和潛在惡意程式碼執行的影響,並提供了設定開發機器的技巧,以便您可以快速安全地工作。
設定編輯器
本次迭代為設定編輯器添加了對具有固定數量布林屬性的設定物件的支援,方法是將屬性呈現為複選框列表。

本次迭代還增加了對列舉陣列的額外支援,方法是在編輯模式下使用下拉列表而不是純文字框。

瞬態工作區
現在有一種新的工作區型別,稱為“瞬態”工作區,其行為與通常的工作區不同,具體來說:
- 重新啟動或重新載入 VS Code 不會嘗試再次開啟工作區。
- 設定為瞬態的工作區不會顯示在最近開啟的工作區列表中。
透過在工作區 .code-workspace 檔案中新增 transient 屬性並將其設定為 true 來指定瞬態工作區
{
"folders": [],
"transient": true
}
設定同步
設定同步現在有一個故障排除檢視,其中包含所有日誌和上次同步狀態。您可以透過執行命令設定同步:顯示已同步資料來訪問此檢視,並透過開啟檢視子選單並選中故障排除來啟用它

搜尋最大結果設定
有一個新設定 search.maxResults,它允許您設定文字搜尋結果的最大數量。預設值是 20,000,高於之前的 10,000。載入大量搜尋結果時可能會出現一些緩慢。
整合終端
在編輯器區域中的終端
終端現在可以在編輯器區域中建立或移動,從而實現多維網格佈局,無論面板狀態如何,該佈局都將持久存在並保持可見。
要在編輯器區域中使用終端,有幾個選項:
- 透過在編輯器區域建立終端命令建立。
- 將終端從選項卡列表拖放到編輯器。
- 終端獲得焦點後,執行將終端移動到編輯器區域。
- 在終端選項卡上下文選單上選擇移動到編輯器區域。

新的 terminal.integrated.defaultLocation 設定可以設定為 editor,以預設將新建立的終端定向到編輯器區域。
顯式設定 canvas 渲染器
在之前的迭代中,我們預設啟用了 WebGL 終端渲染器,並將 terminal.integrated.rendererType 設定替換為更簡單的 terminal.integrated.gpuAcceleration。不幸的是,某些機器在使用 WebGL 時體驗會下降,唯一的選擇是完全停用 GPU 加速並切換到慢得多的基於 DOM 的渲染器。terminal.integrated.gpuAcceleration 現在可以顯式設定為 canvas,這對於這些環境可能更可取。
隱藏連結懸停
新的 terminal.integrated.showLinkHover 設定允許您停用終端中的連結懸停。如果您覺得終端連結上的懸停分散注意力,這會很有用。
編輯器
編輯器捲軸自定義
有新的設定來自定義編輯器的捲軸:
- 使用
editor.scrollbar.horizontal和editor.scrollbar.vertical控制捲軸可見性。 - 使用
editor.scrollbar.horizontalScrollbarSize和editor.scrollbar.verticalScrollbarSize更改其厚度。 - 使用
editor.scrollbar.scrollByPage確定點選是按頁滾動還是跳轉到點選位置(預設行為)。
下面是編輯器垂直捲軸寬度設定為 30 畫素。

語言
Markdown 預覽中的數學公式渲染
VS Code 的內建 Markdown 預覽現在可以使用 KaTeX 渲染數學方程。

內聯數學方程用單個美元符號包裹
Inline math: $x^2$
您可以使用雙美元符號建立數學方程塊
Math block:
$$
\displaystyle
\left( \sum_{k=1}^n a_k b_k \right)^2
\leq
\left( \sum_{k=1}^n a_k^2 \right)
\left( \sum_{k=1}^n b_k^2 \right)
$$
您可以設定 "markdown.math.enabled": false 來停用此功能。
Markdown 數學公式語法高亮
VS Code 現在還支援 Markdown 原始碼中的數學方程高亮顯示

這適用於普通 Markdown 檔案和 notebook 中的 Markdown 單元格。
TypeScript 4.3.5
我們現在捆綁了 TS 4.3.5。這個次要更新修復了一些重要的錯誤,包括 JSX 中自動匯入不工作。
除錯
記住每個檔案選擇的環境
在沒有 launch.json 檔案的情況下開始除錯時,VS Code 會檢視活動編輯器,並根據編輯器的語言模式決定使用哪個除錯擴充套件。但是,對於某些語言,可能存在多個除錯擴充套件,在這種情況下,VS Code 會提示您選擇其中一個。為了使除錯更順暢,VS Code 現在會記住每個檔案選擇的偵錯程式,以便下次開始除錯時,會話無需任何提示即可開始。
在下面的短影片中,使用者選擇 Node.js 除錯環境來除錯單個 JavaScript 檔案,並且當該檔案開始新的除錯會話時,該選擇會被記住。

除錯控制檯建議不再透過 Enter 鍵接受
除錯控制檯建議不再透過 Enter 鍵接受,而是僅透過 Shift+Enter 和 Tab 鍵接受。以前,當您只是想評估除錯控制檯輸入中已輸入的內容時,很容易意外接受建議。
為了使 Tab 鍵作為接受建議的方式更容易被發現,VS Code 現在在除錯控制檯輸入中有一個提示狀態列(“插入 (Tab)”)。

對擴充套件的貢獻
Jupyter 互動式視窗
我們已經開始致力於在 notebook 生態系統之上提供內建的互動式視窗體驗,並且 Jupyter 擴充套件已透過設定 jupyter.enableNativeInteractiveWindow 採用了它。如果啟用了該功能,當從 Python 檔案執行程式碼或直接從命令面板啟動時,Jupyter 擴充套件將開啟內建編輯器而不是 webview 實現。由於它與工作臺深度整合,因此內建編輯器可與您自定義的鍵繫結/鍵對映或語言擴充套件配合使用。

Jupyter notebook 除錯
我們一直在致力於支援 Jupyter notebook 中的除錯,以便您可以在 notebook 單元格中設定斷點、逐行執行單元格以及使用所有其他 VS Code 偵錯程式功能。這是實驗性的,但您可以透過設定 "jupyter.experimental.debugging": true、在所選核心中安裝 ipykernel 版本 6,然後單擊 notebook 工具欄中的除錯按鈕來試用它。

遠端倉庫
在本次迭代中,我們主要關注 遠端倉庫擴充套件的錯誤修復和一些效能改進,以及與 GitHub Pull Requests and Issues 擴充套件的更好整合。此外,您現在可以從遠端資源管理器中的遠端倉庫檢視中刪除遠端倉庫,並且更好地支援開啟帶有行範圍的 \blob URL。
GitHub 拉取請求和議題
本次迭代中,GitHub Pull Requests and Issues 擴充套件的重點是修復錯誤。檢視更新日誌以瞭解亮點。
遠端開發
遠端開發擴充套件的工作仍在繼續,它允許您使用容器、遠端機器或 適用於 Linux 的 Windows 子系統 (WSL) 作為功能齊全的開發環境。
1.58 中的功能亮點包括:
- 轉發埠時僅開啟一次瀏覽器的選項。
devcontainer.json對快取影像的支援。- Dev Containers 現在檢查 "hostRequirements"。
您可以在遠端開發發行說明中瞭解有關新擴充套件功能和錯誤修復的資訊。
即時預覽
我們開發了一個 Live Preview 擴充套件,它託管一個用於 web 開發預覽的本地伺服器!🎉
它具有編輯器內瀏覽器預覽、即時預覽重新整理(在檔案更改或儲存時)、多根支援等等!

該擴充套件還有一個 Live Preview 任務,它執行一個持久伺服器,允許您檢視伺服器流量及其相關檔案。

要了解有關其功能的更多資訊,您可以在市場中找到詳細資訊或檢視其倉庫。
預覽功能
TypeScript 4.4 支援
此版本包括對即將釋出的 TypeScript 4.4 版本的初步支援。您可以在 TypeScript 部落格上閱讀有關 TypeScript 4.4 中新語言功能和改進的更多資訊。
要開始使用 TypeScript 4.4 每晚構建版本,請安裝 TypeScript Nightly 擴充套件。
請分享您的反饋,如果您在使用 TypeScript 4.4 時遇到任何錯誤,請告知我們。
在視窗之間移動終端
現在可以透過在一個視窗中使用終端:分離會話來分離終端,並在另一個視窗中使用終端:附加到會話來附加終端,從而在視窗之間移動終端。將來,這應該有助於實現跨視窗拖放!
擴充套件創作
詳細的完成項標籤
我們添加了新的 API,用於更詳細和結構化的完成項標籤。您現在可以使用 vscode.CompletionItemLabel 型別作為項的標籤,它允許您指定標籤、詳細資訊和描述。
這些新屬性允許語言擴充套件顯示簽名或限定符,其他完成提供程式也可以利用這一點。例如,GitHub Pull Request and Issues 擴充套件現在顯示全名以及別名。

模態訊息的詳細資訊
用於顯示模態資訊、警告和錯誤訊息的 API 現在支援提供詳細資訊。詳細資訊文字渲染在實際訊息下方,且不太顯眼。

上面的對話方塊是使用以下程式碼片段生成的。請注意,詳細資訊文字僅支援模態訊息 (modal: true)。
vscode.window.showInformationMessage('This is the message', {
modal: true,
detail:
'This is the detail. Rendered less prominent, but with more space for, well, details.'
});
貢獻終端配置檔案
終端配置檔案現在可以由擴充套件貢獻,並將顯示在配置檔案選擇器中

要貢獻終端配置檔案,您需要做三件事:
首先,將貢獻新增到您的 package.json 中
"contributes": {
"terminal": {
"profiles": [
{
"title": "Custom Profile",
"id": "custom_profile"
}
]
},
}
接下來,新增啟用事件,以便當使用者請求配置檔案時啟用擴充套件
"activationEvents": [
"onTerminalProfile:custom_profile"
]
最後,註冊終端配置檔案提供程式,它將返回用於建立終端的選項集。選項可以是標準的基於程序的 TerminalOptions,也可以是自定義的 ExtensionTerminalOptions
vscode.window.registerTerminalProfileProvider('custom_profile', {
provideTerminalProfile() {
return {
options: {
name: 'Profile from extension',
shellPath: 'cmd.exe'
}
};
}
});
更改基於 ExtensionTerminalOptions 的終端名稱
新的 Pseudoterminal.onDidChangeName 事件允許更改使用 ExtensionTerminalOptions 建立的終端的名稱。
const writeEmitter = new vscode.EventEmitter<string>();
const nameEmitter = new vscode.EventEmitter<string>();
const pty = {
onDidWrite: writeEmitter.event,
onDidChangeName: nameEmitter.event,
open: () => writeEmitter.fire('Press and key to set the terminal title'),
close: () => {
/* noop*/
},
handleInput: (data: string) => {
writeEmitter.fire(`Set title to "${data}"`);
nameEmitter.fire(data);
}
};
const terminal = (<any>vscode.window).createTerminal({ name: `My Extension REPL`, pty });
terminal.show();
設定透過擴充套件 API 建立的終端的圖示
window.createTerminal 現在接受一個 iconPath,將圖示與其選項卡中的終端相關聯。
const term = vscode.window.createTerminal({
name: `Serve`,
iconPath: new vscode.ThemeIcon('server-process')
});
term.show();
![]()
列舉儲存的 Memento 鍵
有一個新的 Memento.keys() API 用於列舉儲存的 Memento 鍵集。這個 API 可以使處理以前儲存的資料更容易,如果您需要遷移儲存的資料,它會很有幫助。
語言伺服器協議
新版本的語言伺服器協議以及相應的 npm 模組已經發布。該版本包含 診斷拉取模型規範的最終提案。
除錯介面卡協議
“記憶體寫入”請求和“記憶體更改”事件的進展
我們計劃在未來版本的 VS Code 除錯體驗中整合記憶體檢視器。為此,除錯介面卡協議中存在一個 ReadMemory 請求已有一段時間。我們現在正在研究相應的 WriteMemory 請求和 Memory 事件。WriteMemory 請求有一個最終提案,將在下一個里程碑中新增到 DAP。Memory 事件提案仍在討論中。如果您是除錯擴充套件作者並對這些 DAP 協議新增感興趣,我們將感謝您的反饋。
建議的擴充套件 API
每個里程碑都會帶來新的提議 API,擴充套件作者可以嘗試使用它們。一如既往,我們希望得到您的反饋。要嘗試提議的 API,您需要執行以下操作:
- 您必須使用 Insiders 版本,因為提議的 API 經常更改。
- 您的擴充套件的
package.json檔案中必須包含以下行:"enableProposedApi": true。 - 將最新版本的 vscode.proposed.d.ts 檔案複製到您專案的源位置。
您不能釋出使用提議 API 的擴充套件。下個版本中可能會有破壞性更改,我們絕不希望破壞現有擴充套件。
豐富的狀態列懸停
有一個新的提議 API,用於支援狀態列項上的豐富懸停。要試用它,請在 StatusBarItem.tooltip2 中提供 MarkdownString。

- 如果
MarkdownString.supportThemeIcons為 true,您可以使用$(iconName)語法使用圖示。 - 如果
MarkdownString受到信任,您還可以新增命令連結。語法:([test](command:vscode.newWindow))
測試
測試 API 的最終確定工作仍在繼續。本次迭代中,我們重構了一些測試 API,使其更好地匹配擴充套件主機中其他 API 的風格。要跟蹤最終確定過程並瞭解 API 更改,請關注問題 #122208。
我們預見到的主要變化是如何提供“執行配置”。要跟蹤或權衡這些執行程式 API 的進展,請關注問題 #127096。
最後,我們開始調查和初步實施測試覆蓋率,這將在未來幾周內在 UI 中獲得表面區域。
內聯建議
內聯建議 API 允許擴充套件提供與建議小部件分離的內聯建議。內聯建議渲染為彷彿它已經被接受,但顏色為灰色。使用者可以迴圈瀏覽建議並使用 Tab 鍵接受它們。
vscode.languages.registerInlineCompletionItemProvider(
{ pattern: '**' },
{
provideInlineCompletionItems: async (document, position) => {
return [{ text: '< 2) {\n\treturn 1;\n\t}' }];
}
}
);

工程
ES2020
我們更新了 TypeScript 專案,允許使用最近的 JavaScript API,如 Promise.allSettled 或 String.replaceAll。我們還輸出更現代的 JavaScript,即 ES2020,這略微減小了我們主捆綁包的總體大小。
Electron 沙盒支援的進展
在這個里程碑中,我們繼續讓 VS Code 視窗為啟用 Electron 的沙盒和上下文隔離功能做好準備。
具體來說:
- 我們取消了對 Node.js 的依賴,以便在一般情況下載入開啟 VS Code 視窗所需的資源。
- 我們為
iframe元素添加了搜尋功能,使其行為更接近已棄用的webview元件,從而使我們將來可以放棄webview。可以透過在settings.json檔案中設定"webview.experimental.useIframes": true來啟用此功能。
文件
資料科學教程和主題
資料科學教程和主題現在位於 https://vscode.com.tw 目錄中的單獨部分下。您可以找到有關使用 Jupyter Notebooks、Python 互動式視窗的教程,甚至還有一個分析泰坦尼克號乘客資料的資料科學教程。

值得注意的修復
- 120956:iPad:無法在編輯器外部觸發上下文選單
- 122448:如果擴充套件的依賴項被停用,則自動停用擴充套件
- 124169:嘗試不對活動的除錯行進行縮排
- 125144:當執行緒不再停止時,焦點不會自動傳遞給另一個執行緒
- 125528:當不再停止在該斷點上時,在斷點檢視中取消選擇斷點
- 126211:退出 VS Code 時,透過偵錯程式啟動的 Node 程序不會被殺死
- 126702:macOS:命令列
code .不工作 - 127716:除錯懸停:允許鍵盤搜尋屬性
感謝
最後但同樣重要的是,衷心感謝以下本月為 VS Code 做出貢獻的人們:
對我們問題跟蹤的貢獻
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Simon Chan (@yume-chan)
- ArturoDent (@ArturoDent)
- Alexander (@usernamehw)
對 vscode 的貢獻
- @Aaaaash (大表哥)
- 修復:areLanguageDiagnosticSettingsEqual 始終返回 true PR #125365
- 檔案觀察器排除 - 不要忽略對 node_modules 資料夾本身的更改。 PR #125801
- @barbaravaldez (Barbara Valdez):修改 treeDataChange 事件 PR #125214
- @conwnet (netcon):修復:web typescript 擴充套件找不到定義 PR #125279
- @cpsauer (Christopher Sauer):接受編輯器行高為字型大小的倍數 PR #125601
- @danielgary (Daniel Gary):使用標題進行終端選擇 PR #123478
- @datho7561 (David Thompson):為 XML 和 XSL 語言新增
wordPatternPR #127334 - @fannheyward (Heyward Fann):修復:importStatementSuggestions 配置部分 PR #124822
- @forivall (Emily Marigold Klassen):chore(typescript-language-features):修復 deprecated 的拼寫 PR #125693
- @hantatsang (Sang):改進 DocumentFilter 文件 PR #125734
- @jeanp413 (Jean Pierre)
- 修復終端拖放覆蓋層在面板位於側面時水平移動而不是垂直移動 PR #124985
- 修復在擴充套件編輯器中檢視貢獻選項卡時出錯 PR #125607
- 修復將無效元素拖放到編輯器區域後出錯 PR #125943
- 修復將無效元素拖放到終端時出錯 PR #126553
- 修復豐富的懸停焦點輪廓顯示在狀態列懸停下方 PR #127603
- @ksyx:修復(window.ts):無響應的視窗彈出訊息 [NFC] PR #126351
- @LiangchengJ (Liangcheng Juves):更新 macOS Big Sur 的“Code - OSS”圖示 PR #124416
- @markxoe (Mark Oude Elberink):最佳化英文請動作 PR #125154
- @mghalayini (Mohammad Ghalayini):支援以根資料夾開頭的連結 PR #125615
- @movermeyer (Michael Overmeyer):為 Snippet 變數新增 camelCase 轉換 PR #127257
- @nrayburn-tech (Nicholas Rayburn)
- 將 hover css 新增到 hover 元素 PR #123384
- 新增選項以不顯示終端的連結懸停 PR #124926
- @qchateau (Quentin Chateau):修復重複的程式碼格式 PR #126183
- @richardtallent (Richard Tallent):修復 renderWhitespace 預設值的文件 PR #125591
- @rickpmartin (Rick Martin):新增 search.maxResults 設定 PR #126762
- @ryyppy (Patrick Ecker):更新到最新的 seti-ui 並將 ReScript 新增到圖示主題 PR #125659
- @stefanloerwald (Stefan Lörwald):修復 #125303 PR #125304
- @suzmue (Suzy Mueller):未指定 threadId 時設定頂級停止原因 PR #126852
- @turara:修復 [Terminal: Clear] 命令 PR #107454
- @Vtec234 (Wojciech Nawrocki)
- 新增 WASM MIME 型別 PR #125782
- 支援 webview 本地資源的 Content-Length 和 Last-Modified PR #125994
對 vscode-extension-samples 的貢獻
對 vscode-html-languageservice 的貢獻
- @dummdidumm (Simon H):新增一些缺失的滑鼠和指標事件 PR #108
- @hardikshah197 (Hardik Sharma):次要文件型別更改為“value” PR #107
對 vscode-js-debug 的貢獻
- @rinselmann (Ryan Inselmann):修復:嘗試在 index.html 中設定斷點時出錯 PR #1029
對 vscode-languageserver-node 的貢獻
- @dsherret (David Sherret):確保在關閉連線之前傳送退出通知 PR #776
對 language-server-protocol 的貢獻
- @DanTup (Danny Tuppeny):新增 source.fixAll 常量 PR #1308
對 monaco-editor 的貢獻
- @anthony-c-martin (Anthony Martin):新增 Bicep 示例 PR #2541
對 monaco-languages 的貢獻
- @qwefgh90 (Changwon Choe):改進 restructuredText 中凍結頁面的規則 PR #141
對 monaco-typescript 的貢獻
- @spahnke (Sebastian Pahnke):正確構建所有標籤的標籤文字 PR #81