2019 年 1 月 (版本 1.31)
1.31.1 更新:本次更新解決了這些 問題。
下載:Windows:x64 | Mac:Intel | Linux 64 位:deb rpm tarball | 32 位:deb rpm tarball
歡迎使用 Visual Studio Code 2019 年 1 月版。此版本中有許多重要更新,希望您會喜歡,其中一些主要亮點包括:
- 安裝擴充套件無需重新載入 - 安裝新擴充套件時不會中斷。
- 樹形 UI 改進 - 改進了資源管理器導航和過濾,支援水平滾動。
- 主選單更新 - 重新設計了 Go 操作選單,編輯選單增加了剪下命令。
- 多行問題輸出 - 在“問題”面板中檢視完整的多行問題詳細資訊。
- 查詢所有引用歷史記錄 - 快速重新執行以前的引用搜索。
- HTML、CSS 和 JSON 的語義選擇 - 根據語言語義展開/收縮選擇。
- 整合終端重排支援 - 終端文字會隨面板寬度變化自動重排。
- 基於命令的使用者輸入變數 - 任務和除錯配置的自定義使用者輸入。
- 更新的擴充套件 API 文件 - 完全重寫並附帶擴充套件指南。
如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。
您還可以檢視 Cloud Developer Advocate Brian Clark 製作的 1.31 版本 亮點影片。
釋出說明按以下與 VS Code 重點領域相關的部分進行排列。以下是一些進一步的更新
- 工作臺 - Zen 模式隱藏行號,新的截圖模式顯示按鍵。
- 編輯器 - 智慧選擇改進,調整引用 CodeLens 位置。
- 整合終端 - Windows 上的 ConPTY 支援,查詢改進。
- 擴充套件創作 - 擴充套件更改事件,在瀏覽器中開啟資源操作。
Insiders:想盡快看到新功能嗎?您可以下載每夜更新的 Insiders 構建版本,並第一時間嘗試最新的更新。有關最新的 Visual Studio Code 新聞、更新和內容,請在 Twitter 上關注我們 @code!
擴充套件
安裝無需重新載入
能夠在不強制重新載入 (重啟) VS Code 的情況下安裝擴充套件是投票最多的功能請求之一,我們在本次釋出中為您帶來了此功能。安裝或啟用擴充套件時不再需要重新載入 VS Code。
在下面的示例中,使用者在開啟 .vue
檔案後遵循建議安裝 Vetur 擴充套件。請注意,Vetur 擴充套件提供的語言功能(例如語法著色、診斷錯誤)在安裝推薦的擴充套件後立即可用。
如果擴充套件未啟用,則解除安裝或停用擴充套件時也無需重新載入。
注意:有些擴充套件需要重新載入,因為它們依賴外部貢獻(對其他擴充套件的擴充套件點做出貢獻)。這需要外部貢獻點所有者透過監聽 extensions.onDidChange
事件來採納。
工作臺
新的樹形小部件
我們已將小部件遊戲提升到一個新的水平:建立了一個新的樹形小部件來解決效能問題,並使我們能夠在多個工作臺區域提供更多功能。新的樹形小部件是透過在我們高效能列表小部件的基礎上進行組合建立的。我們打算就這項工程工作和效能改進撰寫一篇單獨的部落格文章。目前,我們將重點關注功能。
注意:新樹已在檔案資源管理器、所有除錯樹、搜尋和“檢視引用”中採用。下面描述的功能適用於大多數這些 UI 區域,除非我們明確停用。
改進的鍵盤導航
現在樹中有三種不同型別的鍵盤導航:simple
、highlight
和 filter
。在 highlight
和 filter
模式下,在樹中鍵入時,樹的頂部會顯示一個小部件(控制元件),表明您現在正在導航樹。
此小部件還可以用於在 highlight
和 filter
模式之間切換。如果您希望使用鍵盤快捷鍵在模式之間切換,可以配置一個鍵盤繫結來執行 list.toggleFilterOnType
命令。工作臺 > 列表:鍵盤導航 (workbench.list.keyboardNavigation
) 設定設定了預設模式,包括 simple
模式,在該模式下,鍵入樹元素的幾個首字母只會聚焦該元素。
為列表/樹操作設定了單字母鍵盤繫結的使用者仍然可以使用此功能,方法是利用 listAutomaticKeyboardNavigation
上下文鍵。例如,VIM 擴充套件將此上下文鍵設定為 false
以停用自動鍵盤導航,併為 list.toggleKeyboardNavigation
命令添加了鍵盤繫結 /
,因此使用者只需鍵入 /
即可導航樹。在 VSCodeVIM 拉取請求 中瞭解更多資訊。
主題作者可以使用以下新主題鍵自定義小部件的顏色:
listFilterWidget.background
listFilterWidget.outline
listFilterWidget.noMatchesOutline
注意:這些鍵盤導航模式目前僅適用於已解析的樹節點。例如,在檔案資源管理器中,如果從未展開資料夾,樹將不會查詢其子級。我們正在考慮多種選項來改善此體驗。
分層全選
在樹中按下 Ctrl+A
(macOS 上為 Cmd+A
)現在將以分層方式展開樹的選擇。
可自定義縮排
您現在可以使用 工作臺 > 樹:縮排 (workbench.tree.indent
) 設定來自定義工作臺中所有樹的節點縮排。
全部展開/摺疊
在展開/摺疊樹節點時按住 Alt
鍵現在將遞迴工作。請注意,遞迴展開僅適用於樹中先前顯示過的節點。例如,檔案資源管理器不會自動展開使用者以前從未展開過的資料夾。
水平滾動
工作臺 > 樹:水平滾動 (workbench.tree.horizontalScrolling
) 設定現在可以在更多樹和列表上啟用水平滾動,即資源管理器、搜尋、SCM、除錯等。
問題面板
多行訊息
“問題”面板現在以單獨的行顯示多行診斷訊息。下面的示例顯示了 TypeScript 的多行錯誤訊息現在如何呈現。
您還可以使用摺疊/展開按鈕或 問題:在單行中顯示訊息 和 問題:在多行中顯示訊息 命令來切換顯示或隱藏完整訊息。
使用鍵盤快捷鍵觸發程式碼操作
您現在可以使用與快速修復命令相同的預設鍵盤快捷鍵 ⌘. (Windows、Linux Ctrl+.) 從“問題”面板觸發程式碼操作。
改進的 Go 選單
我們為 Go 選單添加了更多導航操作,使其更易於發現。
資源管理器上下文選單中的剪下命令
根據普遍請求,我們已將剪下命令新增到資源管理器上下文選單中。
快速滾動
按下 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}
:檔案所在資料夾的完整路徑。
輸出面板
“輸出”面板中的智慧滾動行為現在效率更高。當您單擊“輸出”面板中的任意位置時,滾動會鎖定,當您單擊最後一行時,滾動會解鎖。
截圖模式
VS Code 中新增了 截圖模式,它會突出顯示游標位置和按鍵。截圖模式(開發人員:切換截圖模式)可用於演示目的。
編輯器
智慧選擇
我們已努力改進“選擇”選單中的展開選擇和收縮選擇的實現。我們正在新增一個 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 Insider 快速通道(內部版本號 18309+)中的可選功能提供。
{
"terminal.integrated.windowsEnableConpty": true
}
這將使用 Windows Console 團隊提供的 ConPTY 系統作為終端的後端。啟用此功能應該可以修復 Windows 終端的許多問題,特別是在顏色支援、互動式應用程式和原生支援 VT 序列的 Shell 方面。
以下是 WSL 終端中 256 ANSI 顏色支援的改進前後對比:
用於連結的當前工作目錄
在 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
已移除。) - 或者,將 JSON 與
contributes.html.experimental.customData
或contributes.css.experimental.customData
打包到擴充套件中。 - 最後,如果您正在編寫使用 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
等 Node 模組在瀏覽器中開啟 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
是否應該計算其 Code Actions 很有用。
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 擴充套件已經使用此提議的源 CodeAction 型別來實現全部修復和儲存時自動修復。
除錯介面卡協議
資料斷點建議除錯介面卡協議
作為資料斷點(AKA“觀察點”)正在進行的工作的後續步驟,我們在資料斷點的除錯介面卡協議設計方面取得了一些進展。建議的 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。
更好的效能資訊
在此版本中,開發人員:啟動效能命令輸出在編輯器中顯示,不再在開發工具中顯示。這使其更易於閱讀和更快地獲取資訊。此外,許多資訊問題已得到修復。
WinJS.Promise 移除 ✅
當 VS Code 剛開始時,JavaScript 還不像今天這樣。例如,沒有原生 Promise,因此團隊決定使用 WinJS.Promise
來處理非同步工作。今天,情況不同了:原生 Promise 是真實的,而 WinJS.Promise
已過時。去年年中,我們開始努力從程式碼庫中移除 WinJS.Promise
,並於 12 月完成。
嚴格空值檢查
我們繼續努力對主 VS Code 程式碼庫進行嚴格的 null 檢查。感謝您的幫助,在這個里程碑中,我們能夠為大量測試檔案啟用嚴格的 null 檢查,從而消除了大量錯誤。
我們將在下一個里程碑中繼續進行嚴格的 null 檢查工作。
對擴充套件的貢獻
我們的團隊維護或貢獻了許多 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 審查支援。您現在可以將評論分組到審查中,而不是單獨新增它們。
- 當工作區是 GitHub 倉庫時,當您加入 Live Share 會話時,擴充套件程式可以無縫執行。
- 我們逐步將 GraphQL 引入專案,因此描述檢視現在提供更詳細的拉取請求資訊,並且擴充套件的整體效能得到了改進。
- 您現在可以在合併拉取請求時選擇建立合併提交、壓縮併合並或變基併合並。
- 效能改進。當您瀏覽拉取請求、檔案更改和檢出拉取請求時,我們減少了對 GitHub 的 API 呼叫和 Git 操作,這使得擴充套件響應更快,尤其是在 Windows 上。
您可以在 vscode-pull-request-github 版本上閱讀擴充套件的完整發行說明。
新文件
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: 恢復作業系統後,終端和縮圖恢復紋理損壞
- 59794: 當 editor.accessibilitySupport 設定為 'auto' 時,終端螢幕閱讀器支援不起作用
- 61649: 除錯無法讀取未定義的屬性 'onError'
- 63832: 除錯擴充套件時無法附加到 lsp 伺服器
- 64948: GDB C/C++ 偵錯程式無法啟動,報錯
- 65697: node cluster fork 程序未遵守 autoAttachChildProcesses 的 debug stopOnEntry
- 66302: Ctrl + L 應預設繫結到清除 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): 搜尋: 改進清除按鈕行為 PR #63082
- Alexander Eyers-Taylor (@aeyerstaylor)
- Agustín Rodríguez (@agurodriguez): 防止“報告問題”和“程序資源管理器”視窗在全屏模式下開啟 PR #64839
- Anirudh Rayabharam (@anirudhrb): 修復問題 65204: 開啟鍵盤繫結圖示消失 PR #65968
- @asaf050: 允許從終端上下文選單中殺死終端 PR #66535
- Chris Patterson (@chrisrpatterson): 更新構建徽章 URL PR #67008
- Christian Alexander (@ChristianAlexander): 新增 git add -N 新增的檔案顯示處理 PR #59163
- Christian Flach (@cmfcmf): 為任務新增 terminalGroup 以允許它們在拆分窗格中執行 PR #65973
- Christian Oliff (@coliff): EditorConfig.org 的 HTTPS 連結 PR #65358
- Danny Tuppeny (@DanTup): 修復拼寫錯誤: "accepeted" => "accepted" PR #64976
- @davidwu226: 修復無效的 JSON。 PR #65447
- Donald Pipowitch (@donaldpipowitch): 新增 .vscodeignore 語法高亮 PR #64960
- Thai Pangsakulyanont (@dtinth): 解析 tsconfig.json 時使用 jsonc.parse 而不是 JSON.parse,修復了 tsconfig.json 包含註釋時
-b
標誌未啟用的錯誤。 PR #67535 - Thien Do (@dvkndn): 更新 nvmrc 到 node 8 PR #67183
- Ashwin Ramaswami (@epicfaace)
- Phil (@flurmbo): 檢測 md 影像連結 PR #66958
- li zixiang (@fuafa): 為 findModel.test.ts 新增嚴格 null 檢查 PR #66436
- Gabriel Arjones (@g-arjones): 修復 #59635 PR #60111
- @g1tman: 在終端不可見時,調整大小時不獲取字型 PR #66781
- Gabriel DeBacker (@GabeDeBacker): 允許終端建立忽略 VSCode 的程序環境 PR #64733
- Chris Ganga (@gangachris)
- 啟用 src/vs/base/test/common/async.test.ts 的嚴格 null 檢查 PR #65442
- 啟用 ./vs/base/test/common/keyCodes.test.ts 的嚴格 null 檢查 PR #65454
- 啟用 ./vs/base/test/common/octicon.test.ts 的嚴格 null 檢查 PR #65458
- 啟用 ./vs/base/test/node/config.test.ts 的嚴格 null 檢查 PR #65471
- 啟用 ./vs/base/test/common/event.test.ts 的嚴格 null 檢查 PR #65444
- 啟用 ./vs/base/test/common/history.test.ts 的嚴格 null 檢查 PR #65453
- 啟用 windowsFinder 的嚴格 null 檢查 PR #65551
- 啟用查詢控制器的嚴格 null 檢查 PR #65553
- Gaurav Gupta (@gaurav5430): 啟用 ./vs/platform/contextkey/test/common/contextkey.test.ts 的嚴格 null 檢查 PR #65474
- Guy Waldman (@guywald1): [git] 新增從特定引用建立分支的命令 PR #59078
- Henk Mollema (@henkmollema): 更新版權年份至 2019 PR #65875
- Ilya Biryukov (@IlyaBiryukov): 新增 Git 日誌、globalConfig 和樹差異 API PR #64826
- James Dinh (@jamesdinht): 啟用檔案測試的嚴格 null 檢查 PR #65249
- James George (@jamesgeorge007): 在使用者程式碼片段中新增多行描述支援 PR #66159
- Jimi (Dimitris) Charalampidis (@JimiC): [主題] 新增無需重啟編輯器即可重新載入主題的功能 PR #66115
- Julia McGeoghan (@jkmdev)
- Joseph Duchesne (@josephduchesne): 修復 #58159,透過觸發佈局重新整理來解決 xtermjs bug... PR #60221
- Josh Goldberg (@JoshuaKGoldberg)
- Krish De Souza (@Kedstar99)
- Kermit Xuan (@Kermit-Xuan)
- Claire (@krider2010): 允許完全停用或手動更新,以及自動更新 PR #60973
- Kumar Harsh (@kumarharsh): fix(loc): 修復透明顏色描述中不正確的措辭 PR #66334
- Anton Marchenko (@marchenko-am): 修復 #64379 - SimpleFindWidget 位置已更改(在隱藏狀態下) PR #64558
- Mathias Rasmussen (@mathiasvr): HTML 程式碼片段: 統一空標籤 PR #66072
- Maksymilian Barnaś (@maxbarnas): #61410 為“在資料夾中查詢”操作新增鍵盤繫結 PR #61526
- Mrigank Krishan (@Mrigank11): 請求將已知的大資料夾新增到 .gitignore,修復 #44304 PR #44562
- J.M. Rütter (@mynetx): 隱藏終端拆分時短暫顯示的未定義標題 PR #61981
- Néstor Hernández Ojeda (@nesukun): 為 scm/git 上下文選單新增強制推送條目 PR #60387
- Noj Vek (Manoj P) (@nojvek): 修復 #27107 - 使用者終端的 cwd 用於連結 PR #64750
- Nuno Lopes (@nunottlopes): 修復在 Windows 上包含空格的路徑中在終端執行活動檔案的問題 PR #65331
- Oleg Voloshin (@oniondomes): 啟用 workspaceStats 測試的嚴格 null 檢查 PR #65429
- Raul Piraces Alastuey (@piraces): 為 suggestMemory.test.ts 新增嚴格 null 檢查 PR #66754
- Prateek Singh (@punteek): 啟用 simpleServices 測試的嚴格 null 檢查 PR #65571
- Rich Evans (@rcbevans): 新增 xterm mouseleave 以關閉小部件 PR #66576
- Matthias Reitinger (@reima): 修復鍵盤繫結列表標題行為問題 (#_41558) PR #60217
- Romain Marcadier-Muller (@RomainMuller): 修復使用引用時“tsc watch”任務的問題 PR #67148
- Rudi Chen (@rudi-c): 為 breadcrumbs.ts、outlineModel.ts、breadcrumbsModel.ts 啟用 strictNullChecks PR #65062
- Segev Finer (@segevfiner)
- @SimonEggert: 新增選項卡關閉順序的設定 PR #66635
- Prabhanjan S Koushik (@skprabhanjan)
- Tereza Tomcova (@the-ress): 在 bootstrap.js 中正確處理 UNC 路徑 PR #66128
- Tiago Ribeiro (@TiagoR98): 功能 #24344 已實現 PR #65072
- Tyler James Leonhardt (@TylerLeonhardt): 處理只有單引號但沒有空格的邊緣情況 PR #66359
- Alexander (@usernamehw)
- 啟用 Comparers 測試的嚴格 null 檢查 PR #65301
- 為 inspect TM 小部件新增對比度 PR #64495
- 啟用 quickOpenScorer 測試的嚴格 null 檢查 PR #65299
- 將游標移到大括號內 PR #67164
- 排除/包含 commandsToSkipShell,而不是破壞使用者設定檔案 PR #66179
- 啟用 Notifications 測試的嚴格 null 檢查 PR #65291
- 啟用 snippetVariables 測試的嚴格 null 檢查 PR #65236
- 啟用 SplitView 測試的嚴格 null 檢查 PR #65307
- 在主題/圖示主題過濾器後新增空格 PR #64745
- 啟用 GridView 測試的嚴格 null 檢查 PR #65305
- 當髒狀態在頂部邊框中突出顯示時,完全隱藏選項卡關閉按鈕 PR #64718
- Dipen Ved (@vedipen)
- @vemoo: 修復命名多行問題模式解析 PR #65840
- Vladimir Kotikov (@vladimir-kotikov): 新增選項以在執行
git pull
之前自動暫存更改 PR #59849 - Jeremy Shore (@w9jds): 修復 #57910 - 新增自動抓取超時設定 PR #59988
- Matthew Walinga (@walinga): 使用 stage line cmd 時,暫存刪除空末尾行 PR #59974
- Yisrael Veller (@YisraelV)
對 vscode-eslint
的貢獻
- Jonathan T L Lee (@Lee182): 問題 529,增加了對 pnpm 的支援 PR #572
- Loune Lam (@loune): disable-eslint 修復和改進 PR #588
對 language-server-protocol
的貢獻
- Laurent Tréguier (@LaurentTreguier): 移除重複的 label 屬性 PR #638
- Jason Axelson (@axelson): 修復變更日誌連結 PR #654
對 vscode-languageserver-node
的貢獻
- Daniel McNab (@DJMcNab):
- Felix Becker (@felixfbecker): 將 repository.directory 欄位新增到 package.json PR #439
- Laurent Tréguier (@LaurentTreguier): 修復配置並非總是使用資源範圍的問題 PR #446
- Aleksey Kladov (@matklad): 在 readme 中提及
npm run symlink
PR #452
對 debug-adapter-protocol
的貢獻
- Ben Jackson (@puremourning): 將 vimspector 新增到實現列表 PR #21
- Sean Allred (@vermiculus): 糾正概述中的各種拼寫錯誤 PR #22
對 vscode-vsce
的貢獻
- Alexander (@usernamehw): 向控制檯訊息新增顏色 PR #324
對 vscode-json-languageservice
的貢獻
對 vscode-css-languageservice
的貢獻
- Krister Kari (@kristerkari): 不警告 :export 塊內的未知屬性 PR #137
- Simon Chan (@yume-chan)
- Matthew Dean: 支援 Less 根函式、查詢、匿名混合 PR #135
對 vscode-html-languageservice
的貢獻
- Liam Newman (@bitwiseman): 更新到 1.9.0-beta1 PR #43
對 vscode-generator-code
的貢獻
- Aurélien Pupier (@apupier): 遵循 markdownLint 換行指南 #154 PR #155
對 vscode-recipes
的貢獻
- Alan Agius (@alan-agius4): docs: 更新 ng test 命令 PR #179
- Bryan Chapel (@bryanchapel): 更新 README.md PR #176
- @CannibalKush: angular 流程的修改 PR #177
- zhan ishzhanov (@janat08): 拆分 JEST 食譜的引數 PR #174
對 localization
的貢獻
有超過 600 名 Cloud + AI 本地化社群成員使用 Microsoft 本地化社群平臺 (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。