2019 年 1 月 (version 1.31)
更新 1.31.1:此更新解決了這些問題。
下載:Windows: x64 | Mac: Intel | Linux 64-bit: deb rpm tarball | 32-bit: deb rpm tarball
歡迎使用 Visual Studio Code 2019 年 1 月版本。此版本有許多重要更新,我們希望你會喜歡,其中一些主要亮點包括
- 安裝擴充套件無需重新載入 - 安裝新擴充套件時不會中斷。
- 樹形 UI 改進 - 改進了資源管理器導航和過濾,支援水平滾動。
- 主選單更新 - 重新設計了“轉到”操作選單,“編輯”選單新增“剪下”命令。
- 多行“問題”輸出 - 在“問題”面板中檢視完整的的多行問題詳細資訊。
- 查詢所有引用歷史記錄 - 快速重新執行以前的引用搜索。
- HTML、CSS 和 JSON 的語義化選擇 - 根據語言語義擴充套件/收縮選擇。
- 整合終端自動重排支援 - 當面板寬度改變時,終端文字自動重排。
- 基於命令的使用者輸入變數 - 用於任務和除錯配置的自定義使用者輸入。
- 更新了擴充套件 API 文件 - 完全重寫幷包含擴充套件指南。
如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。
你還可以檢視 Cloud Developer Advocate Brian Clark 製作的 1.31 版本亮點影片。
釋出說明按以下與 VS Code 重點領域相關的部分進行排列。以下是一些進一步的更新
- 工作臺 - Zen 模式隱藏行號,新的 Screencast 模式顯示按鍵操作。
- 編輯器 - 智慧選擇改進,調整引用 CodeLens 位置。
- 整合終端 - Windows 上的 ConPTY 支援,查詢改進。
- 擴充套件創作 - 擴充套件更改事件,在瀏覽器中開啟資源操作。
Insiders:想盡快看到新功能嗎?您可以下載每夜更新的 Insiders 構建版本,並第一時間嘗試最新的更新。有關最新的 Visual Studio Code 新聞、更新和內容,請在 Twitter 上關注我們 @code!
擴充套件
安裝無需重新載入
能夠在不強制重新載入 (重啟) VS Code 的情況下安裝擴充套件是投票最多的功能請求之一,我們在此版本中提供了此功能。安裝或啟用擴充套件時,不再需要重新載入 VS Code。
在下面的示例中,使用者在開啟 .vue 檔案後按照建議安裝了 Vetur 擴充套件。請注意,Vetur 擴充套件提供的語言功能(如語法著色、診斷錯誤)在安裝完推薦擴充套件後立即可用。

如果擴充套件未被啟用,解除安裝或停用擴充套件時也不需要重新載入。
注意: 有些擴充套件由於外部貢獻(貢獻給其他擴充套件的擴充套件點)而需要重新載入。這需要外部貢獻點所有者透過監聽 extensions.onDidChange 事件來適配。
工作臺
新的樹形小部件
我們將小部件提升到了一個新的水平:建立了一個新的樹形小部件來解決效能問題,並使我們能夠在幾個工作臺區域提供更多功能。新的樹形小部件是透過在我們高效能列表小部件之上組合建立的。我們打算撰寫一篇關於此工程工作和效能改進的單獨部落格文章。現在,我們專注於功能。
注意: 新的樹形小部件已在檔案資源管理器、所有除錯樹、搜尋和 Peek 引用中採用。除非我們明確停用,否則下面描述的功能適用於大多數這些 UI 區域。
改進的鍵盤導航
樹中現在有三種不同型別的鍵盤導航:simple、highlight 和 filter。在 highlight 和 filter 模式下,在樹中輸入將顯示一個位於樹頂部的小部件(控制元件),表明你正在導航樹。

此小部件還可用於在 highlight 和 filter 模式之間切換。如果你想要一個用於在模式之間切換的鍵盤快捷方式,可以配置一個鍵繫結來執行 list.toggleFilterOnType 命令。工作臺 > 列表:鍵盤導航 (workbench.list.keyboardNavigation) 設定可設定預設模式,包括 simple 模式,在此模式下,輸入樹元素的前幾個字元只會將焦點放在該元素上。
對列表/樹操作有單字母鍵繫結的使用者仍然可以使用此功能,方法是使用 listAutomaticKeyboardNavigation 上下文鍵。例如,VIM 擴充套件將此上下文鍵設定為 false 以停用自動鍵盤導航,併為 list.toggleKeyboardNavigation 命令添加了一個鍵繫結 /,因此使用者只需鍵入 / 即可導航樹。在 VSCodeVIM 拉取請求中瞭解更多資訊。
主題作者可以使用以下新主題鍵自定義小部件的顏色
listFilterWidget.backgroundlistFilterWidget.outlinelistFilterWidget.noMatchesOutline
注意: 這些鍵盤導航模式目前僅適用於已解析的樹節點。例如,在檔案資源管理器中,如果一個資料夾從未展開,則樹將不會查詢其子項。我們正在考慮幾種選項來改善這種體驗。
分層全選
在樹中按 Ctrl+A (macOS 上為 Cmd+A) 現在將以分層方式擴充套件樹的選擇。

可自定義的縮排
現在可以使用 工作臺 > 樹:縮排 (workbench.tree.indent) 設定自定義整個工作臺中所有樹的節點縮排。
全部展開/摺疊
按住 Alt 鍵同時展開/摺疊樹節點現在將以遞迴方式工作。請注意,遞迴展開僅適用於先前在樹中顯示的節點。例如,檔案資源管理器不會自動展開使用者以前從未展開過的資料夾。
水平滾動
工作臺 > 樹:水平滾動 (workbench.tree.horizontalScrolling) 設定現在可以在更多樹和列表上啟用水平滾動,即資源管理器、搜尋、SCM、除錯等。
問題面板
多行訊息
“問題”面板現在在單獨的行中顯示多行診斷訊息。下面的示例顯示了 TypeScript 的多行錯誤訊息是如何呈現的。

你也可以使用摺疊/展開按鈕或 問題:在單行中顯示訊息 和 問題:在多行中顯示訊息 命令來切換顯示或隱藏完整訊息。
使用鍵盤快捷方式觸發程式碼操作
現在可以從“問題”面板使用與“快速修復”命令相同的預設鍵盤快捷方式 ⌘. (Windows, Linux Ctrl+.) 觸發程式碼操作。
改進的“轉到”選單
我們在轉到選單中添加了更多導航操作,使其更容易被發現。

資源管理器上下文選單中的“剪下”命令
根據普遍要求,我們在資源管理器上下文選單中添加了“剪下”命令。

快速滾動
按 Alt 鍵可在編輯器和資源管理器中啟用快速滾動。預設情況下,快速滾動使用 5 倍速度乘數,但你可以使用 編輯器:快速滾動敏感度 (editor.fastScrollSensitivity) 設定來控制乘數。
Zen 模式隱藏行號
開啟 Zen 模式現在也會隱藏編輯器行號。此行為可以透過 zenMode.hideLineNumbers 設定控制。
在 Linux 上使用自定義選單新增鍵盤導航
我們的自定義選單現在支援使用 Page Up/Down 和 Home/End 鍵來快速跳轉到選單的開頭或結尾。
在 Windows/Linux 上雙擊應用程式圖示以關閉
由於技術權衡,預設情況下,Windows 和 Linux 上的自定義標題欄會移除雙擊應用程式圖示以關閉視窗的功能。可以透過啟用 window.doubleClickIconToClose 設定來恢復此功能,但代價是你將無法再從此位置拖動視窗或在 Windows 上獲取系統上下文選單。
編輯器選項卡的關閉順序
一個新的設定 workbench.editor.focusRecentEditorAfterClose 允許你更改編輯器選項卡的關閉順序。預設情況下,選項卡將按最近使用 (MRU) 順序關閉。更改此設定允許從右到左關閉選項卡。
新的標題變數
有三個新變數可以在 window.title 設定中使用
${activeFolderShort}: 檔案所在資料夾的名稱。${activeFolderMedium}: 檔案所在資料夾的路徑,相對於工作區資料夾。${activeFolderLong}: 檔案所在資料夾的完整路徑。
輸出面板
“輸出”面板中的智慧滾動行為現在更高效。當你點選“輸出”面板中的任意位置時,滾動被鎖定,當你點選最後一行時,滾動被解鎖。
Screencast 模式
VS Code 中有一個新的 Screencast 模式,它會突出顯示游標位置和按鍵操作。Screencast 模式(開發人員:切換 Screencast 模式)對於演示目的很有用。

編輯器
智慧選擇
我們致力於改進“選擇”選單中 擴充套件選擇 和 收縮選擇 的實現。我們正在新增一個 API,以便語言伺服器可以根據其語義知識指定選擇步驟。此外,我們也改進了預設實現。

請繼續關注,隨著智慧選擇的改進,還會有更多功能推出。使用 smart-select 標籤檢視我們正在開展的工作。
引用歷史記錄
“引用”檢視現在有一個 引用:顯示歷史記錄 命令。它會彈出一個快速選擇框,其中包含以前的搜尋,允許快速重新執行以前的搜尋。

引用 CodeLens
選擇引用 CodeLens 時,會開啟一個 Peek 編輯器。現在可以使用 references.preferredLocation 設定來控制此行為。它的選項是 peek 和 view,後者在新的檢視中顯示引用。
片段描述
在創作帶有長描述的片段時,過去你被迫編寫一個長的單字串。不支援像 body 那樣使用陣列。現在這已經改變了,可以使用字串陣列編寫長描述。
{
"prefix": "happy",
"body": "#Happy Coding!",
"description": ["First Line", "Second Line", "Third Line"]
}
移除了舊版搜尋模式
20 個版本之前,我們開始在 VS Code 中使用 ripgrep 進行搜尋。我們基於舊版 Node.js 的搜尋實現仍然可以透過設定 search.useLegacySearch 使用。但是正如 Marie Kondo 所說,我們必須整理那些不再帶來快樂的東西。如果你一直在使用諸如反向引用或前瞻之類的正則表示式功能,請確保開啟 search.usePCRE2 設定。
使用簡單文字編輯器編輯 JSON 格式的設定
在類似的主題上,既然我們已經有了幾個版本的設定 UI,我們正在考慮簡化 JSON 設定編輯體驗。如果你透過開啟 settings.json 檔案,或點選設定 UI 中的 {} 按鈕,或呼叫 首選項:開啟使用者設定 (JSON) 命令來編輯 JSON 格式的設定,那麼你將獲得一個簡單的 JSON 編輯器,而不是我們以前有的拆分 JSON 編輯器。你仍然可以使用 首選項:開啟預設設定 (JSON) 命令檢視預設設定列表。
如果你確實懷念左側帶有預設設定的拆分 JSON 編輯器,可以透過啟用 workbench.settings.useSplitJSON 設定來恢復它。請注意,如果你喜歡編輯 JSON 格式的設定,你將始終能夠這樣做。
擴充套件的網路代理支援
設定 Http:代理支援 (http.proxySupport) 現在預設啟用對所有擴充套件的網路代理支援。

語言
TypeScript 3.3
我們現在附帶 TypeScript 3.3.1。此 TypeScript 更新帶來了一些重要的錯誤修復和改進。
移除 markdown.previewFrontMatter 設定
markdown.previewFrontMatter 設定已被移除。Markdown 預覽現在總是隱藏 YAML frontmatter(這是 markdown.previewFrontMatter 的預設設定)。
Markdown 擴充套件,例如 Markdown yaml Preamble 和 GitHub Markdown Preview,在預覽中將 frontmatter 渲染為表格。
語義化選擇
語義化選擇現在可用於 HTML、CSS/LESS/SCSS 和 JSON

整合終端
自動重排支援
終端在水平調整大小時將自動換行和取消換行。

Windows 上的 ConPTY 支援
透過 Windows ConPTY API 管理終端程序現在作為 Windows Insiders fast ring(內部版本號 18309+)中的可選功能提供。
{
"terminal.integrated.windowsEnableConpty": true
}
這將使用 Windows Console 團隊提供的 ConPTY 系統作為終端的後端。啟用此功能應該可以修復 Windows 終端的許多問題,特別是在顏色支援、互動式應用程式和原生支援 VT 序列的 shell 方面。
這是 WSL 終端中 256 ANSI 顏色支援的 Before 和 After 對比


用於連結的當前工作目錄
在 Linux 和 macOS 上,終端現在將相對於當前工作目錄解析連結,而不是終端的初始目錄。

終端查詢改進
終端中的查詢現在支援增量“邊輸入邊查詢”搜尋,以及在單行上查詢多個術語的功能。
對 commandsToSkipShell 設定的改進
以前,設定 terminal.integrated.commandsToSkipShell 是一個列表,其中包含將跳過終端評估而由 VS Code 處理的所有命令。這很尷尬,因為你需要在設定檔案中包含 100 多個命令才能更改它。現在將其更改為新增和刪除列表,因此你只包含對預設列表的更改。
{
"terminal.integrated.commandsToSkipShell": [
// Make ctrl+n open a new file when the terminal is focused
"workbench.action.files.newUntitledFile",
// Send ctrl+e to the terminal
"-workbench.action.quickOpen"
]
}
新的緩衝區實現已啟用
v1.29 中引入的基於 TypedArray/ArrayBuffer 的終端緩衝區現在已啟用,舊實現已被移除。這應該會大大提高終端的吞吐量,並顯著減少其記憶體佔用。
除錯和任務
自定義命令使用者輸入變數
上一個里程碑中引入的輸入變數是一種強大的機制,用於在任務或除錯配置中請求使用者輸入。最初,我們提供了 promptString 和 pickString 輸入變數。
在此里程碑中,我們引入了一種新的輸入變數型別 command,它在插入輸入變數時執行任意命令。由於命令可以由擴充套件貢獻,因此現在可以透過新實現擴充套件使用者輸入變數。
以下示例顯示瞭如何在除錯配置中使用型別為 command 的使用者輸入變數,該變數允許使用者從特定資料夾中找到的所有測試用例列表中選擇一個測試用例。假設某個擴充套件提供了 extension.mochaSupport.testPicker 命令,該命令在可配置的位置查詢所有測試用例並顯示一個選擇器 UI 來選擇其中一個。
{
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Test",
"program": "${workspaceFolder}/${input:pickTest}"
}
],
"inputs": [
{
"id": "pickTest",
"type": "command",
"command": "extension.mochaSupport.testPicker",
"args": {
"testFolder": "${workspaceFolder}/tests"
}
}
]
}
任務輸出支援拆分終端
現在可以配置任務以在拆分終端面板中顯示輸出,而不是建立新終端。任務配置可以使用 presentation 部分中的 group 屬性來定義任務的輸出應顯示的位置。
如果你執行下面兩個任務,它們將顯示在拆分終端中,以便你可以同時檢視它們。
{
"version": "2.0.0",
"tasks": [
{
"label": "Task One",
"type": "shell",
"command": "echo One && sleep 5000",
"problemMatcher": [],
"presentation": {
"group": "groupA"
}
},
{
"label": "Task Two",
"type": "shell",
"command": "echo Two && sleep 5000",
"problemMatcher": [],
"presentation": {
"group": "groupA"
}
}
]
}

預覽功能
預覽功能尚未準備好釋出,但已足夠實用。我們歡迎您在這些功能開發期間提供早期反饋。
工作臺的網格佈局
工作臺佈局正在重做,以使用與編輯器本身相同的網格佈局。正在進行的工作不僅會從長遠來看簡化維護工作臺佈局的工程工作,還會幫助我們點亮新的體驗。
在此里程碑中,我們正在推出一種這樣的體驗,以演示使用新網格佈局可以更輕鬆地實現的功能,即切換編輯器區域。啟用實驗性網格佈局 ("workbench.useExperimentalGridLayout": true) 後,有一個新的命令 切換編輯器區域,它會隱藏程式碼編輯器。這允許你建立一個 VS Code 終端面板,該面板佔據完整的編輯器區域,如下圖所示。

如果你使用 code file.txt 從終端開啟一個檔案,它仍然會彈出一個編輯器,就像你期望的那樣。此功能仍在開發中,並且存在已知問題,但我們鼓勵你檢視並提出問題。你可以使用此查詢隨時瞭解有關此工作的最新問題。
HTML 和 CSS 自定義資料支援
由於此功能處於預覽階段,因此設定、貢獻點和資料格式可能會發生變化。

如今,前端開發人員通常使用 HTML/CSS 的超集進行編碼
- Web Components 允許自定義 HTML 元素,例如
<my-button type="alert"></my-button>。 - PostCSS 允許自定義 CSS 屬性,例如
size,以及尚未標準化的 CSS 功能,例如:any-link。 - 各種框架允許在源 HTML/CSS 中具有更大的靈活性。
在此迭代中,我們改進了 1.30 中引入的 HTML 自定義資料支援,並添加了 CSS 自定義資料支援。
- 使用
html.experimental.customData或css.experimental.customData載入自定義資料。(html.experimental.custom.tags和html.experimental.custom.attributes已移除。) - 或者,使用
contributes.html.experimental.customData或contributes.css.experimental.customData將 JSON 打包到擴充套件中。 - 最後,如果你正在編寫使用 vscode-html-languageservice 或 vscode-css-languageservice 的語言伺服器,你可以使用自定義資料建立語言服務。
自定義資料增強了 VS Code 對 HTML/CSS 的理解。例如,透過這些 HTML/CSS JSON 貢獻,VS Code 可以為自定義 HTML 標籤/屬性和 CSS 屬性/偽類提供完成和懸停。
{
"version": 1,
"tags": [
{
"name": "my-button",
"description": "My button",
"attributes": [
{
"name": "type",
"description": "My button type",
"values": [{ "name": "alert" }]
}
]
}
]
}
{
"version": 1,
"properties": [
{
"name": "my-size",
"description": "Compiles down to `width` and `height`. See details at https://github.com/postcss/postcss-size."
}
],
"pseudoClasses": [
{
"name": ":my-link",
"description": ":any-link pseudo class. See details at https://preset-env.cssdb.org/features#any-link-pseudo-class."
}
]
}
上面的示例可在 octref/simple-customdata 處獲取,而功能更完整的示例可在 octref/svg-data 處獲取。
這些指南解釋了資料格式以及如何透過設定和擴充套件貢獻點使用它們。
擴充套件創作
擴充套件更改事件
添加了一個新事件 extensions.onDidChange,當 extensions.all 陣列更改時觸發。當擴充套件被安裝、解除安裝、啟用或停用時,可能會發生這種情況。請參閱安裝無需重新載入部分。
/**
* An event which fires when `extensions.all` changes. This can happen when extensions are
* installed, uninstalled, enabled or disabled.
*/
export const onDidChange: Event<void>;
注意:引入新貢獻點的擴充套件作者應該監聽此事件並相應地更新工作臺的狀態。
在瀏覽器中開啟資源
我們觀察到幾個擴充套件使用 opn 或 open 等節點模組在瀏覽器中開啟 URL。鑑於對這種功能的需求,我們添加了一個新的 API vscode.env.openExternal。它需要一個 URL,可用於開啟網站連結、郵件連結或應用程式 URL 處理程式。此外,還接受檔案 URL 以在其預設應用程式中開啟它們,例如 PDF 檔案。
// open default browser
await vscode.env.openExternal(
vscode.Uri.parse('https://github.com/microsoft/vscode/issues/66741')
);
注意:目前使用 opn 或 open 模組的擴充套件作者應切換到此新 API。
全域性儲存路徑
現在為擴充套件提供了全域性儲存路徑 ExtensionContext.globalStoragePath,該路徑指向具有寫/讀訪問許可權的本地目錄。如果你需要儲存可從所有工作區訪問的大檔案,這是一個很好的選擇。
/**
* An absolute file path in which the extension can store global state.
* The directory might not exist on disk and creation is
* up to the extension. However, the parent directory is guaranteed to be existent.
*
* Use [`globalState`](#_ExtensionContext.globalState) to store key value data.
*/
globalStoragePath: string;
當擴充套件被移除時,VS Code 會負責清理此路徑。
注意:目前使用自定義檔案系統位置來儲存跨工作區狀態的擴充套件作者應切換到此新 API。
CodeActionKind.intersects
CodeActionKind.intersects 方法對於檢查 CodeActionProvider 是否應該費心計算其程式碼操作很有用。
import * as vscode from 'vscode';
export class OrganizeImportsProvider implements vscode.CodeActionProvider {
public provideCodeActions(
document: vscode.TextDocument,
range: vscode.Range,
context: vscode.CodeActionContext,
token: vscode.CancellationToken
): vscode.CodeAction[] {
// Only return organize imports actions if they were explicitly requested
// We can check this using `intersects`.
if (!context.only || !vscode.CodeActionKind.SourceOrganizeImports.intersects(context.only)) {
// Organize imports actions were not requested
return [];
}
// Organize imports was requested
...
}
}
contributes.resourceLabelFormatters
擴充套件現在可以貢獻資源標籤格式化程式,指定如何在工作臺中的任何位置顯示 URI。例如,擴充套件可以為具有方案 remotehub 的 URI 貢獻格式化程式。
"contributes": {
"resourceLabelFormatters": [
{
"scheme": "remotehub",
"formatting": {
"label": "${path}",
"separator": "/",
"workspaceSuffix": "GitHub"
}
}
]
}
這意味著所有具有方案 remotehub 的 URI 將透過僅顯示 URI 的 path 段來呈現,並且分隔符將為 /。具有 remotehub URI 的工作區將在其標籤中帶有 GitHub 字尾。
為鍵繫結新增引數
在 package.json 中定義鍵繫結時,現在可以定義引數。執行時,這些引數會傳遞給命令。
在下面的示例中,它是:{foo: 1, bar: 2}。
"keybindings": {
"key": "cmd+i",
"command": "myCommand",
"args": {
"foo": 1,
"bar": 2
}
}
完全控制 createTerminal 環境
新的設定 TerminalOptions.strictEnv 當設定為 true 時,將不會對終端環境進行任何修改,而是會完全按照擴充套件傳入的方式使用。
// This will create a terminal whose environment only contains the single value
// FOO=BAR.
const terminal = createTerminal({
name: 'Test terminal',
env: {
FOO: 'BAR'
},
strictEnv: true
});
Node.js 更新
VS Code 執行的 Electron 版本已更新,隨之而來的是 Node.js 從 8.9 更新到 10.2.0。所有擴充套件現在都將在更新版本的 Node.js 上執行。檢視 Node v10.0.0 棄用以獲取 Node.js 10 中的棄用列表。
更新的 Octicons
我們已將 Octicons 版本更新到 8.3.0,現在支援以下圖示
![]()
$(arrow-both)$(bold)$(color-mode)$(eye-closed)$(fold-down)$(fold-up)$(grabber)$(italic)$(kebab-horizontal)$(kebab-vertical)$(note)$(organization-filled)$(person-filled)$(project)$(request-changes)$(screen-full)$(screen-normal)$(smiley)$(tasklist)$(text-size)$(unverified)$(verified)
你可以閱讀我們的文件以檢視我們支援的圖示的完整列表。有關更改的完整詳細資訊列表,請參閱 Octicon 更改日誌。
建議的擴充套件 API
每個里程碑都附帶新的提議 API,擴充套件作者可以試用它們。一如既往,我們渴望您的反饋。以下是試用提議 API 所需的操作:
- 您必須使用 Insiders 版本,因為提議的 API 經常更改。
- 您的擴充套件的
package.json檔案中必須包含以下行:"enableProposedApi": true。 - 將最新版本的 vscode.proposed.d.ts 檔案複製到您的專案中。
請注意,您不能釋出使用提議 API 的擴充套件。我們很可能會在下一個版本中進行破壞性更改,我們絕不希望破壞現有擴充套件。
SignatureHelpContext.activeSignatureHelp
提議的 SignatureHelpContext.activeSignatureHelp 欄位跟蹤以前活動的簽名。
import * as vscode from 'vscode';
class MySignatureHelpProvider implements vscode.SignatureHelpProvider {
provideSignatureHelp(
document: vscode.TextDocument,
position: vscode.Position,
token: vscode.CancellationToken,
context: vscode.SignatureHelpContext
): vscode.ProviderResult<vscode.SignatureHelp> {
// The active signature help when this provider was triggered or undefined if
// no signature help was active.
console.log(context.activeSignatureHelp);
...
}
}
提供程式可以使用它來跟蹤在重新觸發簽名幫助提供程式之前選擇了哪個過載。
自動修復和 CodeAction.isPreferred
程式碼操作 API 為 VS Code 的快速修復(你在編輯器中看到的燈泡)提供支援。儘管給定錯誤可能有許多快速修復,但通常其中一個快速修復是解決問題的最合理方法。例如,修復拼寫錯誤通常比生成新欄位更可能是修復。

透過使用提議的 API,擴充套件可以在 CodeAction 上設定 isPreferred,以指示它是解決底層問題的最合理修復。可以使用 自動修復 命令自動應用首選修復(⌥⌘. (Windows, Linux Shift+Alt+.))。

首選快速修復通常應該
- 正確修復底層錯誤(而不是抑制它)。
- 是錯誤的合理修復。
- 不會意外地執行耗時的操作。
重構程式碼操作也可以標記為首選,以指示它們是最合理的重構。例如,儘管可能有多個 提取常量 重構可用,但使用者通常只想提取到最近的區域性變數。如果該重構程式碼操作被標記為 isPreferred,使用者可以為其設定單個鍵繫結。
{
"key": "ctrl+shift+r ctrl+e",
"command": "editor.action.codeAction",
"args": {
"kind": "refactor.extract.constant",
"preferred": true
}
}
修復所有源操作
提議的 source.fixAll CodeActionKind 為可以自動修復檔案中錯誤的擴充套件建立了約定。這種新的源操作種類類似於 組織匯入,使配置“修復所有”操作或啟用儲存時自動修復變得容易。
// On save, run both fixAll and organizeImports source actions
"editor.codeActionsOnSave": {
"source.fixAll": true,
"source.organizeImports": true,
}
TSLint 擴充套件已經使用此提議的原始碼操作種類來實現“修復所有”和“儲存時自動修復”。
除錯介面卡協議
資料斷點提議的除錯介面卡協議
作為正在進行的資料斷點工作(AKA “watchpoints”)的後續步驟,我們在資料斷點的除錯介面卡協議設計方面取得了一些進展。提議的 DAP 更改位於此分支上,相應的 TypeScript API 可以在資料斷點提議中找到。
如果你有興趣在偵錯程式擴充套件中支援資料斷點,請檢視提議並提供反饋。
即時主題編輯
在開發顏色主題擴充套件時,你可以即時檢視顏色更改應用於 擴充套件開發主機 視窗。

檔案圖示主題也同樣適用。
工程
Electron 3.0 更新和 Electron 4.0 探索
在此里程碑中,我們完成了將 Electron 3 捆綁到 VS Code 中的探索,使其成為我們隨穩定版一起釋出此 Electron 版本的第一次。這是一個主要的 Electron 版本,附帶 Chrome 66 和 Node.js 10.x(與我們當前帶有 Chrome 61 和 Node.js 8.x 的版本相比,這是一個巨大的飛躍)。
同時,我們開始探索更新到 Electron 4,我們希望很快將其推送到 Insiders。
更好的效能資訊
在此版本中,開發人員:啟動效能 命令輸出在編輯器中顯示,不再在 DevTools 中顯示。這使得閱讀更容易,獲取更快。此外,資訊中的許多問題都已得到修復。
WinJS.Promise 移除 ✅
當 VS Code 啟動時,JavaScript 還沒有像今天這樣。例如,沒有原生 promise,因此團隊決定使用 WinJS.Promise 進行非同步工作。今天,情況不同了:原生 promise 是真實的,WinJS.Promise 已過時。去年年中,我們開始努力從程式碼庫中移除 WinJS.Promise,並於 12 月完成了這項工作。
嚴格空值檢查
我們繼續努力對主 VS Code 程式碼庫進行嚴格空值檢查。感謝你的幫助,在此里程碑中,我們能夠為大量測試檔案啟用嚴格空值檢查,從而消除了大量錯誤。
我們將在下一個里程碑繼續進行嚴格空值檢查工作。
對擴充套件的貢獻
我們的團隊維護或貢獻了許多 VS Code 擴充套件。本月最值得注意的是
TSLint 支援
新的 TSLint 擴充套件現在支援使用 source.fixAll 程式碼操作在儲存時自動修復。
"editor.codeActionsOnSave": {
"source.fixAll": true
}
我們建議所有使用已棄用的 TSLint (eg2.tslint) 擴充套件的使用者遷移到新的 TSLint 擴充套件。
Stylus 語言支援
Stylus 語言擴充套件現在使用來自 vscode-css-languageservice 的精選資料來提供帶有狀態警告和語法文件的最新完成。

GitHub 拉取請求
在此里程碑中,我們繼續致力於改進 GitHub Pull Requests 擴充套件。
以下是一些新功能
- GitHub Review 支援。你現在可以將評論分組到審閱中,而不僅僅是單獨新增它們。
- 當工作區是 GitHub 儲存庫時,當你加入 Live Share 會話時,擴充套件可以無縫工作。
- 我們逐漸將 GraphQL 引入專案,因此描述檢視現在提供了有關拉取請求的更詳細資訊,並且擴充套件的整體效能得到了改進。
- 合併拉取請求時,你現在可以選擇 建立合併提交、壓縮併合並 或 變基併合並。
- 效能改進。當你瀏覽拉取請求、檔案更改和檢出拉取請求時,我們減少了對 GitHub 的 API 呼叫和 git 操作,這使得擴充套件響應更快,尤其是在 Windows 上。
你可以在 vscode-pull-request-github releases 中閱讀擴充套件的完整發布說明。
新文件
Python Jupyter Notebooks
一個新的使用 Jupyter Notebooks 主題描述瞭如何從 VS Code 中開啟、除錯和匯出 Jupyter Notebooks。
改進的 JavaScript 和 TypeScript 文件
我們重新整理了 JavaScript 和 TypeScript 文章,以確保它們是最新的並提供更有用的資訊。
JavaScript 和 TypeScript 頁面現在提供了 VS Code 為這些語言提供的功能的概述。這些功能的更詳細解釋和教程已移至目錄中 Node.js / JavaScript 和 TypeScript 下的新頁面。
更新了擴充套件 API 文件
對於擴充套件作者,VS Code API 文件已重寫並移至其自己的目錄。

在這裡你會找到文章來
值得注意的修復
- 7570: VS Code 無法離線開啟
- 14372: 擴充套件:停用狀態需要跨視窗通訊
- 34396: 單 CPU VM 上 CPU 使用率高
- 58167: 恢復作業系統後,終端和 minimap 恢復紋理損壞
- 59794: 當 editor.accessibilitySupport 設定為 'auto' 時,終端螢幕閱讀器支援不起作用
- 61649: 除錯無法讀取未定義的屬性 'onError'
- 63832: 除錯擴充套件時無法附加到 lsp 伺服器
- 64948: GDB C/C++ 偵錯程式無法啟動,報錯
- 65697: node cluster fork 程序未遵守帶有 autoAttachChildProcesses 的 stopOnEntry 除錯
- 66302: Ctrl + L 預設應繫結到 clear repl
- 66681: 虛擬文件不顯示“選擇進行比較”和“與選擇進行比較”命令
此版本還包括 Microsoft 安全響應中心 CVE-2019-0728 的安全更新。
感謝
最後但同樣重要的是,衷心感謝!以下幫助使 VS Code 變得更好的各位:
我們問題跟蹤的貢獻。如果您想幫助我們管理傳入的問題,請參閱我們的社群問題跟蹤頁面。
- Alexander (@usernamehw)
- Simon Chan (@yume-chan)
- Prabhanjan S Koushik (@skprabhanjan)
- Eric Amodio (@eamodio)
- Christopher Leidigh (@cleidigh)
對 vscode 的貢獻
- Alec Chan (@aechan): Search: Improvements to clear button behavior PR #63082
- Alexander Eyers-Taylor (@aeyerstaylor)
- Agustín Rodríguez (@agurodriguez): Prevent 'Report Issue' and 'Process Explorer' windows to be opened in fullscreen mode PR #64839
- Anirudh Rayabharam (@anirudhrb): Fixed issue 65204: open keybindings icon disappears PR #65968
- @asaf050: Allow kill terminal from the terminal context menu PR #66535
- Chris Patterson (@chrisrpatterson): Update build badge url PR #67008
- Christian Alexander (@ChristianAlexander): Add display handling of files added by git add -N PR #59163
- Christian Flach (@cmfcmf): Add terminalGroup to tasks to allow running them in split panes PR #65973
- Christian Oliff (@coliff): HTTPS link to EditorConfig.org PR #65358
- Danny Tuppeny (@DanTup): Fix typo: "accepeted" => "accepted" PR #64976
- @davidwu226: Fix invalid JSON. PR #65447
- Donald Pipowitch (@donaldpipowitch): add .vscodeignore syntax highlighting PR #64960
- Thai Pangsakulyanont (@dtinth): Use jsonc.parse instead of JSON.parse when parsing tsconfig.json, fixing bug where
-bflag is not activated when tsconfig.json contains comments. PR #67535 - Thien Do (@dvkndn): Update nvmrc to node 8 PR #67183
- Ashwin Ramaswami (@epicfaace)
- Phil (@flurmbo): Detect md image link PR #66958
- li zixiang (@fuafa): add strict null checks to findModel.test.ts PR #66436
- Gabriel Arjones (@g-arjones): Fix #59635 PR #60111
- @g1tman: Don't fetch font in terminal on resize when it's not visible PR #66781
- Gabriel DeBacker (@GabeDeBacker): Allow a terminal creation to ignore VSCode's process environment PR #64733
- Chris Ganga (@gangachris)
- Enable strict null check for src/vs/base/test/common/async.test.ts PR #65442
- Enable strict null check for ./vs/base/test/common/keyCodes.test.ts PR #65454
- Enable strict null check for ./vs/base/test/common/octicon.test.ts PR #65458
- Enable strict null check ./vs/base/test/node/config.test.ts PR #65471
- Enable Strict null check for ./vs/base/test/common/event.test.ts PR #65444
- Enable strict null check for ./vs/base/test/common/history.test.ts PR #65453
- Enable strict null check for windowsFinder PR #65551
- Enable strict null check for find controller PR #65553
- Gaurav Gupta (@gaurav5430): Enable strict null checking for ./vs/platform/contextkey/test/common/contextkey.test.ts PR #65474
- Guy Waldman (@guywald1): [git] Add command to create branch from specific ref PR #59078
- Henk Mollema (@henkmollema): Update copyright year to 2019 PR #65875
- Ilya Biryukov (@IlyaBiryukov): Add Git log, globalConfig, and tree diff API PR #64826
- James Dinh (@jamesdinht): Enable strict null checking for files test PR #65249
- James George (@jamesgeorge007): Add multiline description support in user snippets PR #66159
- Jimi (Dimitris) Charalampidis (@JimiC): [themes] Add ability to reload themes without restarting the editor PR #66115
- Julia McGeoghan (@jkmdev)
- Joseph Duchesne (@josephduchesne): Fixed #58159 by triggering a layout refresh to work around xtermjs bug… PR #60221
- Josh Goldberg (@JoshuaKGoldberg)
- Krish De Souza (@Kedstar99)
- Kermit Xuan (@Kermit-Xuan)
- Claire (@krider2010): Allow updates to be completely disabled or manual, as well as automatic PR #60973
- Kumar Harsh (@kumarharsh): fix(loc): fix incorrect phrasing for transparent color descriptions PR #66334
- Anton Marchenko (@marchenko-am): Fix #64379 - SimpleFindWidget position was changed (in hidden state) PR #64558
- Mathias Rasmussen (@mathiasvr): HTML Snippet: Consistent void tags PR #66072
- Maksymilian Barnaś (@maxbarnas): #61410 Add keybinding to "Find in Folder" action PR #61526
- Mrigank Krishan (@Mrigank11): Ask to add known huge folders to .gitignore, fixes #44304 PR #44562
- J.M. Rütter (@mynetx): Hide undefined title showing briefly on term split PR #61981
- Néstor Hernández Ojeda (@nesukun): Add entries to scm/git context menu for force pushing PR #60387
- Noj Vek (Manoj P) (@nojvek): Fixes #27107 - User terminal's cwd for links PR #64750
- Nuno Lopes (@nunottlopes): Fix run active file in terminal on paths with spaces under Windows PR #65331
- Oleg Voloshin (@oniondomes): Enable strict null checking for workspaceStats test PR #65429
- Raul Piraces Alastuey (@piraces): Add strict null checks to suggestMemory.test.ts PR #66754
- Prateek Singh (@punteek): Enable strict null checking for simpleServices test PR #65571
- Rich Evans (@rcbevans): Add xterm mouseleave to dismiss widget PR #66576
- Matthias Reitinger (@reima): Fix issues with keybindings list header behavior (#_41558) PR #60217
- Romain Marcadier-Muller (@RomainMuller): Fix the "tsc watch" task when references are used PR #67148
- Rudi Chen (@rudi-c): Enables strictNullChecks to breadcrumbs.ts, outlineModel.ts, breadcrumbsModel.ts PR #65062
- Segev Finer (@segevfiner)
- @SimonEggert: Add setting for tab closing order PR #66635
- Prabhanjan S Koushik (@skprabhanjan)
- Tereza Tomcova (@the-ress): Handle UNC paths correctly in bootstrap.js PR #66128
- Tiago Ribeiro (@TiagoR98): Feature #24344 implemented PR #65072
- Tyler James Leonhardt (@TylerLeonhardt): Handle the edge case where there's a single quote but no space PR #66359
- Alexander (@usernamehw)
- Enable strict null checking for Comparers test PR #65301
- Add contrast ratio to inspect TM widget PR #64495
- Enable strict null checking for quickOpenScorer test PR #65299
- Move cursor inside braces PR #67164
- Exclude/include commandsToSkipShell instead of butchering user settings file PR #66179
- Enable strict null checking for Notifications test PR #65291
- Enable strict null checking for snippetVariables test PR #65236
- Enable strict null checking for SplitView test PR #65307
- Add a space after theme/icon theme filters PR #64745
- Enable strict null checking for GridView test PR #65305
- Completely hide tab close button when dirty state is highlighted in top border PR #64718
- Dipen Ved (@vedipen)
- @vemoo: fix named multiline problem pattern parsing PR #65840
- Vladimir Kotikov (@vladimir-kotikov): Add option to automatically stash changes before performing
git pullPR #59849 - Jeremy Shore (@w9jds): Fix #57910 - Add setting for auto fetch timeout PR #59988
- Matthew Walinga (@walinga): Stage empty last line removal when using stage line cmd PR #59974
- Yisrael Veller (@YisraelV)
對 vscode-eslint 的貢獻
- Jonathan T L Lee (@Lee182): Issue 529, Added support for pnpm PR #572
- Loune Lam (@loune): disable-eslint fixes and improvements PR #588
對 language-server-protocol 的貢獻
- Laurent Tréguier (@LaurentTreguier): Remove duplicated label property PR #638
- Jason Axelson (@axelson): Fix changelog link PR #654
對 vscode-languageserver-node 的貢獻
- Daniel McNab (@DJMcNab):
- Felix Becker (@felixfbecker): Add repository.directory field to package.json PR #439
- Laurent Tréguier (@LaurentTreguier): Fix configuration not always using resource scope PR #446
- Aleksey Kladov (@matklad): mention
npm run symlinkin the readme PR #452
對 debug-adapter-protocol 的貢獻
- Ben Jackson (@puremourning): Add vimspector to implementations list PR #21
- Sean Allred (@vermiculus): Correct various typos in overview PR #22
對 vscode-vsce 的貢獻
- Alexander (@usernamehw): Add colors to console messages PR #324
對 vscode-json-languageservice 的貢獻
對 vscode-css-languageservice 的貢獻
- Krister Kari (@kristerkari): Don't warn for unknown properties inside an :export block PR #137
- Simon Chan (@yume-chan)
- Matthew Dean: Support for Less root functions, lookups, anonymous mixins PR #135
對 vscode-html-languageservice 的貢獻
- Liam Newman (@bitwiseman): Update to 1.9.0-beta1 PR #43
對 vscode-generator-code 的貢獻
- Aurélien Pupier (@apupier): Follow markdownLint guidelines for linebreaks #154 PR #155
對 vscode-recipes 的貢獻
- Alan Agius (@alan-agius4): docs: update ng test command PR #179
- Bryan Chapel (@bryanchapel): Update README.md PR #176
- @CannibalKush: modifications to angular flow PR #177
- zhan ishzhanov (@janat08): Split arguments for JEST recipe PR #174
對 localization 的貢獻
有超過 600 名 Cloud + AI Localization 社群成員使用 Microsoft Localization Community Platform (MLCP),其中有大約 100 名活躍貢獻者為 Visual Studio Code 做出貢獻。
我們感謝您的貢獻,無論是提供新翻譯、對翻譯投票,還是提出流程改進建議。
這是貢獻者的快照。有關專案詳細資訊,包括貢獻者姓名列表,請訪問專案網站:https://aka.ms/vscodeloc。
- 保加利亞語:Любомир Василев。
- 捷克語: Samuel Tulach。
- 丹麥語: Johan Fagerberg。
- 荷蘭語: Jos Verlinde,Eric Algera。
- 芬蘭語: Petri Niinimäki, Valtteri Vatanen。
- 法語: Mohamed Sahbi, Thomas Gouthière。
- 德語: Frank Lindecke,Hans Meiser,Jakob von der Haar,Sebastian Seidl。
- 希伯來語: Kyle Orin。
- 印地語: Satish Yadav,nirav adatiya,shaswat rungta,Dhanvi Kapila。
- 匈牙利語: Péter Nagy。
- 簡體中文: 福永 葉, Xiangrui Kong, Licheng Ren, Young Bige, 文 陳, Y F, 彥佐 劉, 九鼎 譚。
- 印尼語: Azhe Kun。
- 義大利語: Michael Longo。
- 日語: nh,Masakazu TENMYO, 裕子 知念。
- 韓語: SeungJin Jeong。
- 挪威語: Stephan Eriksen。
- 波蘭語: grzegorz m, Jakub Jedryszek。
- 葡萄牙語(巴西): Bruno Talanski, Alan Willian, Letticia Nicoli, Alessandro Fragnani, Cynthia Zanoni。
- 葡萄牙語(葡萄牙): Vitor Barbosa。
- 西班牙語: Engel Aguilar, José María Aguilar, julian3xl, Alvaro Enrique Ruano, Ing. Sergio Uziel Tovar Lemus, Mario Mendieta。
- 泰米爾語: Mani M。
- 土耳其語: Muhammed Emin TİFTİKÇİ。
- 烏克蘭語: Did Kokos。
- 越南語: Việt Anh Nguyễn。