2018 年 8 月 (版本 1.27)
更新 1.27.2:此更新解決了這些問題。
下載:Windows:x64 | Mac:Intel | Linux 64 位:deb rpm tarball | 32 位:deb rpm tarball
歡迎使用 Visual Studio Code 2018 年 8 月版。此版本中有許多重大更新,希望您會喜歡,其中一些主要亮點包括:
- 設定編輯器 - 新的設定編輯器 UI,用於發現、搜尋和修改 VS Code 設定。
- 自定義選單欄 - Windows 和 Linux 上完全可主題化的標題和選單欄。
- 麵包屑改進 - 使用麵包屑導航時符號會高亮顯示。
- 新終端選單 - 用於建立終端和管理任務的組合菜單。
- 平臺特定鍵盤快捷鍵 - 在不同作業系統之間共享相同的 keybindings.json 檔案。
- CSS @import 路徑補全 - 在 CSS、SCSS 和 Less 中鍵入時提供匯入路徑建議。
- JSON 條件評估 - 支援 'if'、'then' 和 'else' 模式關鍵字。
- 內建已載入指令碼檢視 - 已載入指令碼資源管理器現在可用於除錯擴充套件。
如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。
您還可以觀看 Cloud Developer Advocate Brian Clark 製作的 1.27 版本亮點影片。
Insiders:想盡快看到新功能嗎?您可以下載每夜更新的 Insiders 構建版本,並第一時間嘗試最新的更新。有關最新的 Visual Studio Code 新聞、更新和內容,請在 Twitter 上關注我們 @code!
工作臺
設定編輯器
在過去的幾個月中,我們一直在開發用於編輯設定的 GUI。在 1.27 版本中,我們將其設為預設設定編輯器。
您仍然可以透過使用命令首選項:開啟使用者設定 (JSON) 或透過使用"workbench.settings.editor"
設定更改預設設定編輯器來訪問 JSON 設定編輯器。
我們本月做出的一項改進是透過將設定值描述 (enumDescriptions
) 移動到自定義下拉控制元件中來清理 UI。
已修改的設定現在用藍線表示,就像編輯器中已修改的行一樣。齒輪圖示會開啟一個上下文選單,其中包含一個選項,用於將設定重置為預設值。
設定值現在會進行驗證,並且會顯示任何驗證錯誤。
目錄現在在搜尋期間保持可見,並過濾以僅顯示具有匹配項的類別。您可以單擊類別以將結果過濾為該類別下的設定。如果您更喜歡在搜尋期間隱藏目錄,請將"workbench.settings.settingsSearchTocBehavior"
設定為"hidden"
。
當您在設定中搜索時,我們由 Bing 提供支援的搜尋服務仍會提供它認為相關的結果。現在,該服務還會向您顯示 Marketplace 中具有相關設定的擴充套件。您將在設定搜尋結果底部看到一個按鈕,顯示匹配的擴充套件。單擊後,將開啟“擴充套件”檢視,其中顯示匹配的擴充套件。
Windows 和 Linux 上的自定義標題欄和選單
在過去的幾次迭代中,我們一直在努力改進 Windows 和 Linux 上標題欄和選單的外觀、感覺和可用性。在此迭代中,我們正在刪除預覽標籤,目標是儘快將其設為 Windows 上的預設體驗。要啟用此功能,您可以將設定"window.titleBarStyle"
設定為"custom"
。
新體驗比預設體驗具有幾個優勢:
- 整個產品中可主題化的標題欄、選單欄和上下文選單。這意味著您的深色主題保持深色!
- 選單欄中更好的鍵盤導航。我們使使用鍵盤在選單之間切換和使用選單助記符變得更容易。
- 侵擾性更小的選單欄。當將
"window.menuBarVisibility"
設定為"toggle"
時,新體驗更緊湊,更不突兀。 - 更好的可訪問性。已解決幾個可訪問性問題,以改善螢幕閱讀器對選單的可用性。
由於我們希望將這種新體驗設為 Windows 上的預設體驗,因此我們鼓勵您嘗試並向我們傳送反饋,以便我們提供最佳體驗。
麵包屑改進
我們調整了新的麵包屑欄,進行了各種改進,並修復了錯誤:
- 聚焦的文件符號現在在編輯器中高亮顯示。
- 當執行焦點命令 (⇧⌘; (Windows, Linux Ctrl+Shift+;)) 時,麵包屑會自動啟用。
- 麵包屑在主題方面工作得更好。
- 麵包屑現在遵守檔案排除配置。
新終端選單
任務選單已重新命名為終端,並添加了一些整合終端的更多條目。
平臺特定鍵繫結
現在可以使用鍵繫結的when
子句中的isLinux
、isMac
和isWindows
為特定作業系統啟用鍵盤快捷鍵。
[
{
"key": "ctrl+o",
"command": "workbench.action.files.openFolder",
"when": "!isMac"
},
{
"key": "cmd+o",
"command": "workbench.action.files.openFolder",
"when": "isMac"
}
]
這使得在不同機器之間共享您的keybindings.json
檔案變得更加容易。
以新原生標籤頁開啟視窗
一個新的 macOS 專用命令workbench.action.newWindowTab
,將視窗作為新的原生標籤頁開啟。newWindowTab
沒有預設鍵繫結,並且需要啟用設定window.nativeTabs
。
檔案在外部刪除/重新命名時不再關閉
我們將workbench.editor.closeOnFileDelete
設定的預設值從true
更改為false
。這意味著在 VS Code 之外(或由 Git 等其他程式或整合終端的命令)刪除或重新命名的檔案將不再關閉作為編輯器選項卡開啟的檔案。相反,檔案將指示它已從磁碟刪除,您可以只需儲存檔案即可將其恢復。
注意:除非檔案已修改,否則檔案內容在重新啟動之間不會保留。
中鍵單擊在新編輯器中開啟檔案
現在可以在“資源管理器”檢視中使用滑鼠中鍵在新編輯器中開啟檔案,而不是在預覽模式中重用上一個編輯器。
輔助功能改進
我們修復了相當多的可訪問性問題 - 主要圍繞鍵盤導航、螢幕閱讀器支援和焦點。完整列表可以在此處找到。這是一項正在進行的工作,我們計劃在 9 月繼續進行。
改進的 Windows 後臺更新
我們對自定義 Windows 後臺更新程式進行了一些穩定性工作,以解決導致一些使用者安裝損壞的問題。這是一項持續的工作,將在即將釋出的版本中進行更多改進。
編輯器
自動關閉和包圍字元
當鍵入某些括號(如{
、[
或(
)時,根據程式語言,如果它們後面跟著通常不能開始表示式的特定字元(例如;:.,=}])>
),它們將預設自動關閉。此行為可以透過editor.autoClosingBrackets
設定進行自定義。同樣,可以透過editor.autoClosingQuotes
在鍵入引號(如"
、'
或`
)時自定義自動關閉行為。
當文字被選中並且您鍵入其中一個字元時,選擇將被括號或引號包圍。現在可以透過新的editor.autoSurround
設定單獨調整此行為。
語言
CSS 匯入路徑補全
CSS、SCSS 和 Less @import
的路徑補全現已可用。SCSS partial @import
也得到了處理。
CSS 連結的跳轉到定義
現在 CSS、SCSS 和 Less 中的@import
和url()
連結有跳轉到定義功能。
JSON
內建 JSON 語言擴充套件現在支援新的JSON Schema Draft-07。
最有趣的新增是if
、then
、else
關鍵字,以允許條件模式評估。
{
"type": "integer",
"minimum": 1,
"maximum": 1000,
"if": { "minimum": 100 },
"then": { "multipleOf": 100 },
"else": {
"if": { "minimum": 10 },
"then": { "multipleOf": 10 }
}
}
if
關鍵字意味著,如果值模式的驗證結果透過,則應用then
模式,否則應用else
模式。
HTML
HTML 格式化程式已更新到JS Beautifier 的 1.8.1 版本。
這為"html.format.wrapAttributes"
設定添加了一個新選項。
"aligned-multiple"
將在達到最大行長時換行屬性,並將所有換行行與第一個屬性對齊。
TypeScript 3.0.3
VS Code 現在附帶 TypeScript 3.0.3。此次小版本釋出修復了許多錯誤並提高了穩定性。您可以在此處閱讀完整的更改集。
除錯
已載入指令碼檢視現在可重用
一年多以來,除錯檢視中的已載入指令碼資源管理器是由 Node.js 除錯擴充套件貢獻的,並且不適用於其他偵錯程式。在此版本中,我們已將已載入指令碼檢視新增為內建偵錯程式功能。所有具有“指令碼”概念的除錯擴充套件都將能夠支援在動態更新檢視中訪問其指令碼。
此外,我們還改進了舊的“已載入指令碼資源管理器”的一些缺點:
- 單子資料夾鏈現在摺疊為單個節點。這使得深入鑽取深但稀疏的資料夾層次結構變得更加容易。
- 我們已開始解決可訪問性問題。
中鍵單擊以刪除斷點
現在可以使用滑鼠中鍵在斷點檢視中輕鬆刪除斷點。
將“openDebug”的預設值更改為每個會話開始時開啟
對於新使用者,有時當您啟動除錯會話並且除錯檢視不會每次都自動開啟時,可能會感到困惑。如果使用者還不熟悉 UI,他們不知道要查詢哪些關鍵字才能開啟 UI。為了避免混淆,我們將debug.openDebug
的預設值更改為openOnSessionStart
,以便除錯檢視在每個會話開始時開啟,而不僅僅是第一次(這是以前的預設行為)。
擴充套件開發
擴充套件日誌記錄
activate
函式的引數ExtensionContext
有一個新屬性logPath
。這是擴充套件可以儲存日誌檔案的目錄的絕對檔案路徑。該路徑對於擴充套件是唯一的,並且不會被其他擴充套件重用。
語言伺服器協議
新版本的語言伺服器協議現已可用,幷包含用於 VS Code 的相應節點模組。
新版本支援:
- 伺服器發出的程式碼操作型別通知,允許客戶端填充相應的選單項。
- 一個
textDocument/prepareRename
的實現。 - 在工作區編輯中支援檔案操作(建立、重新命名和刪除)。
vscode-languageclient
:JSON 日誌格式和日誌流
以前,當使用vscode-languageclient
構建語言伺服器擴充套件時,您可以指定[langId].trace.server
將LSP 日誌傳送到 VS Code 輸出通道。
[langId].trace.server
現在可以以機器可讀的JSON 格式輸出日誌資訊。
"languageServerExample.trace.server": {
"format": "json", // or "text"
"verbosity": "verbose" // or "off" | "messages"
}
這開啟了有趣的用例,例如將 LSP 日誌流式傳輸到LSP Inspector中以視覺化語言伺服器的行為。
您可以在Microsoft/language-server-protocol-inspector和lsp-log-streaming-sample中瞭解更多資訊。
除錯擴充套件:內建已載入指令碼檢視
已載入指令碼資源管理器現在是 VS Code 偵錯程式的內建元件。為了使用它,偵錯程式擴充套件需要以以下方式更改其除錯介面卡:
- 在
initialize
請求返回的Capabilities
中新增一個supportsLoadedSourcesRequest
功能,其值為true
。 - 透過返回當前載入的源集來實施
loadedSources
請求。 - 為新載入或解除安裝的源發出
loadedSource
事件。
新主題顏色
麵包屑有一個新的主題顏色:
breadcrumb.background
:麵包屑項的背景顏色。
設定編輯器有新的主題顏色:
settings.dropdownListBorder
:新下拉控制元件的邊框顏色。settings.modifiedItemIndicator
:指示已修改設定的行的顏色。
Git 擴充套件 API
Git 擴充套件已開始公開更明確的 API。此 API 可以從任何其他擴充套件中使用,以與使用者工作區中開啟的 Git 倉庫進行互動。由於它仍處於初步階段,我們將在即將釋出的版本中不斷改進該 API。
提議的擴充套件 API
每個里程碑都附帶新的提議 API,擴充套件作者可以試用它們。一如既往,我們渴望您的反饋。以下是試用提議 API 所需的操作:
- 您必須使用 Insiders 版本,因為提議的 API 經常更改。
- 您的擴充套件的
package.json
檔案中必須包含以下行:"enableProposedApi": true
。 - 將最新版本的 vscode.proposed.d.ts 檔案複製到您的專案中。
請注意,您不能釋出使用提議 API 的擴充套件。我們很可能會在下一個版本中進行破壞性更改,我們絕不希望破壞現有擴充套件。
SCM:選定的原始碼控制
為了讓擴充套件知道使用者已選擇哪些原始碼控制例項以在 UI 中可見,SourceControl
例項現在具有一個selected
屬性以及一個表示該狀態的onDidChangeSelection
事件。
export interface SourceControl {
/**
* Whether the source control is selected.
*/
readonly selected: boolean;
/**
* An event signaling when the selection state changes.
*/
readonly onDidChangeSelection: Event<boolean>;
}
評論提供程式
此迭代中,我們引入了評論的概念,它允許擴充套件在編輯器和新的評論面板中建立和管理對話。這使得擴充套件能夠支援程式碼審查場景。
評論組織成執行緒並與特定文件關聯。
export enum CommentThreadCollapsibleState {
Collapsed = 0,
Expanded = 1
}
interface CommentThread {
threadId: string;
resource: Uri;
range: Range;
comments: Comment[];
collapsibleState?: CommentThreadCollapsibleState;
}
interface Comment {
commentId: string;
body: MarkdownString;
userName: string;
gravatar: string;
command?: Command;
}
要顯示評論,擴充套件必須註冊DocumentCommentProvider
或WorkspaceCommentProvider
。
export interface CommentThreadChangedEvent {
readonly added: CommentThread[];
readonly removed: CommentThread[];
readonly changed: CommentThread[];
}
interface CommentInfo {
threads: CommentThread[];
commentingRanges?: Range[];
}
interface DocumentCommentProvider {
provideDocumentComments(
document: TextDocument,
token: CancellationToken
): Promise<CommentInfo>;
createNewCommentThread(
document: TextDocument,
range: Range,
text: string,
token: CancellationToken
): Promise<CommentThread>;
replyToCommentThread(
document: TextDocument,
range: Range,
commentThread: CommentThread,
text: string,
token: CancellationToken
): Promise<CommentThread>;
onDidChangeCommentThreads: Event<CommentThreadChangedEvent>;
}
interface WorkspaceCommentProvider {
provideWorkspaceComments(token: CancellationToken): Promise<CommentThread[]>;
onDidChangeCommentThreads: Event<CommentThreadChangedEvent>;
}
使用DocumentCommentProvider
,可以返回開啟文件的評論。在提供評論時,擴充套件會指定文件上的當前執行緒以及文件支援新增新評論的範圍。可以在文件中新增或回覆評論。
當首次註冊WorkspaceCommentProvider
時,CommentsPanel
變得可見並顯示提供給它的所有評論。評論按評論執行緒和資源分組。當在面板中選擇評論時,會執行評論command
,因此擴充套件決定行為。
預覽功能
預覽功能尚未準備好釋出,但已足夠實用。我們歡迎您在這些功能開發期間提供早期反饋。
Electron 3.0 探索
在此里程碑期間,我們探索了將 Electron 3.0.0 打包到 VS Code 中。這是一個重要的 Electron 版本,附帶 Chrome 66 和 Node.js 10.x(與我們當前擁有 Chrome 61 和 Node.js 8.x 的版本相比,這是一個重大飛躍)。我們計劃在不久的將來向我們的 Insiders 使用者推出更新,以收集更多反饋。如果您有興趣提供幫助,請務必安裝 VS Code Insiders。
工程
擴充套件和 webpack
我們現在正在使用 webpack 打包擴充套件。它實現了兩個成就:(1) 減少了擴充套件的啟動時間,因為要載入的檔案更少,要解析的源也更少;(2) 減少了安裝時間,因為需要提取和寫入磁碟的檔案更少。到目前為止,我們已將捆綁包大小減少了約 4000 個檔案!
效能金絲雀
我們添加了一個測試工具,以確保我們的啟動效能不會下降。有一個新指令碼可以部署到專用機器上,以測試 Insider 版本的效能。該指令碼只是安裝最新的版本,並確保它在時間限制內啟動。目前,我們從 Windows 開始,因為效能通常受防病毒軟體更新的影響,但計劃是在我們支援的所有平臺上進行測試。
IPC 堆疊改進
我們改進了自研的 IPC 堆疊,以支援程序間的位元組緩衝區訊息。這使得某些場景成為可能,例如在不同程序之間傳送二進位制資料而沒有開銷,並允許我們最佳化 IPC 以提高效能。
值得注意的修復
- 6363:儲存時會刪除備用資料流
- 25919:強制在新視窗中作為原生標籤頁開啟的新命令
- 49021:儲存時不重置 WSL 許可權元資料
- 49403:在整合終端中除錯時自動附加導致問題
- 55025:允許在擴充套件主機重啟時繼續除錯
- 56084:開啟編輯器:根據視覺順序重新審視組的順序
- 56691:路徑中存在 # 時啟動 vscode 錯誤
- 57018:停止/重新啟動偵錯程式無法停止 babel-node
感謝
最後但同樣重要的是,衷心感謝!以下幫助使 VS Code 變得更好的各位:
對 vscode
的貢獻
- 123 (@16m):[修復拼寫錯誤] s/clientWidth/clientHeight/ PR #56544
- Nil (@cdnil):
- Daniel McNab (@DJMcNab):新增 rust 區域註釋 (#_55648) PR #57069
- Alexandr Fadeev (@fadeevab):檢查改進的測試:${}、$$ 和 $(shell ())。 PR #55826
- Zach Bloomquist (@flotwig):預設將“快速切換視窗”選擇為下一個視窗 PR #55535
- Olga Lesnikova (@Geloosa):君主語言動作的速記型別 PR #57439
- Gopal Goel (@gopalgoel19):將副檔名新增到“不再顯示”選單標籤 PR #55984
- Hao Hu (@hhu94):新增 openEditorAtIndex 命令以傳入編輯器索引 PR #56441
- Itamar (@itamark):單擊“提交錯誤”後隱藏反饋表單 PR #55938
- Jatin Sandilya (@jats22):當擴充套件庫服務不可訪問時顯示錯誤訊息 PR #56767
- Jean Pierre (@jeanp413):修復 #47852 PR #56775
- Krzysztof Cieślak (@Krzysztof-Cieslak):字首檢測從檔名的開頭開始 PR #55961
- Manoel (@ManoelLobo):新增 .eslintrc 擴充套件 PR #57014
- Mathieu Déziel (@mathdeziel):修復當開角括號後跟空格時 emmet 驗證 PR #55762
- Matt Ferderer (@mattferderer):更新 Markdown 連結片段以使用 https PR #56851
- Dmitry Ignatovich (@mechatroner):新增更改文件語言的 API 函式 PR #55107
- Jesse Mazzella (@ozyx):新增選項以啟用引數提示的迴圈 PR #55354
- Karthikayan (@ParkourKarthik):在“檢查擴充套件更新”操作上通知過時擴充套件的數量 PR #56053
- @ris58h:
- Nikolai Vavilov (@seishun):在 Windows 上儲存現有檔案時使用“r+”進行截斷 PR #42899
對 vscode-vsce
的貢獻
- Amir Ali Omidi (@aaomidi):將 useYarn 新增到 ICreateVSIXOptions、IPublishOptions 和 IPublishVSIXOptions PR #279
- Amadeusz Annissimo (@amadeann):更改了包命令中的 --out 標誌描述 PR #280
- Sriram Thaiyar (@sri):成功釋出擴充套件時顯示其 URL PR #281
對 vscode-eslint
的貢獻
- Jan Pilzer (@Hirse):
- Dave Townsend (@Mossop):允許為語言伺服器設定節點執行時 PR #516
對 language-server-protocol
的貢獻
- Jens Fischer (@Gama11):新增帶有 providedCodeActionKinds 的 CodeActionOptions PR #534
- Remy Suen (@rcjsuen):
- @ehuss:修復 Color Presentation Request 中的拼寫錯誤。 PR #544
- Miro Spönemann (@spoenemann):PR #550
對 vscode-languageserver-node
的貢獻
- Jens Fischer (@Gama11):新增帶有 providedCodeActionKinds 的 CodeActionOptions PR #385
- Anton Kosyakov (@akosyakov):確保在重啟時安裝文件監聽器 PR #396
對 debug-adapter-protocol
的貢獻
- Josh Tynjala (@joshtynjala):新增 SWF 除錯介面卡 PR #1
- Glenn Sarti (@glennsarti):(maint) 將 Puppet 新增到實現者列表 PR #2
- Thomas Müller (@tmueller):更新 adapters.md PR #4
- F.W. (@fwcd):將 Eclipse LSP4J 新增到已知 SDK 列表 PR #5
對 vscode-css-languageservice
的貢獻
- Connor Shea (@connorshea):將 CSS Lint 規則名稱新增到 lint 標記。 PR #116
對 vscode-html-languageservice
的貢獻
對 vscode-json-languageservice
的貢獻
- Viktor Havrylin (@Fer0x):[draft-07] 實現 if/then/else PR #24
對 node-jsonc-parser
的貢獻
- Chris Wendt (@chrismwendt):不要修改給定路徑 PR #12
對 vscode-generator-code
的貢獻
對 localization
的貢獻
Transifex VS Code 專案團隊有近 1200 名成員,每月約有 100 名活躍貢獻者。我們感謝您的貢獻,無論是提供新的翻譯、對翻譯進行投票還是提出流程改進建議。
以下是此版本的貢獻者快照。有關專案(包括貢獻者名單)的詳細資訊,請訪問專案網站:https://aka.ms/vscodeloc。
- 保加利亞語:Любомир Василев。
- 克羅埃西亞語:Nikša Mihaica。
- 丹麥語:Christoffer Bech。
- 英語(英國):Matthew John Cheetham, Swotboy2000。
- 芬蘭語:Petri Niinimäki, Feetu Nyrhinen, Jussi Palo。
- 法語:Antoine Griffard, Guillaume Bauer, Smrman。
- 德語:Carsten Siemens, Carsten Kneip, Jonas Droste, Markus Hatvan, Christian Studer, Peter Schneider, Jonas Keller, thefreshman89。
- 匈牙利語:Tar Dániel, Bence László。
- 簡體中文:Joel Yang, 子實 王, Wang Dongcheng, pluwen, DongWei, Henry Chu, aimin guo, Chris Pan 潘鼕鼕, 子昂 馬。
- 繁體中文:Duran Hsieh, Winnie Lin, Poy Chang, Alan Tsai。
- 印度尼西亞語:Wildan Mubarok, G-RiNe Project。
- 義大利語:Luca Bruni, Alessandro Alpi, Andrea Dottor, Emanuele Curati, Riccardo Cappello, Gianluca Acerbis, Emilie Rollandin, Marco Dal Pino, Luigi Bruno, Lorthirk, Aldo Donetti。
- 日語:Shunya Tajima, Satoshi Kajiura, Yuichi Nukiyama, Hiroyuki Mori, yoshioms。
- 韓語:Kyunghee Ko, PaulNara, smallsnail, Kwangjin Hwang。
- 立陶宛語:Tomas Cimermonas。
- 波蘭語:Artur, hawkeye116477, Patryk Brejdak, Mateusz Gazdziak, Robert Skórski, Sebastian Baran。
- 葡萄牙語(巴西):Roberto Fonseca, Bruno Sonnino, Marcelo Fernandes, Lucas Miranda, João Mesquita, Danilo Dantas, Rodrigo Crespi, Arthur Bruel, Thiago Moreira de Souza Arrais, Otacilio Saraiva Maia Neto, Loiane Groner, Fabio Correia。
- 葡萄牙語(葡萄牙):Richard Nunes, Daniel Correia, Tiago Costa。
- 羅馬尼亞語:Bogdan Mateescu, Szauka。
- 俄語:Roman Slauta, Ivan Kuzmenko。
- 西班牙語:Alejandro Medina, José M. Aguilar, Roberto Fonseca, Javier Moreno, Andy Gonzalez, Alberto Poblacion, Nancy Todd, Antonio Sanmartín。
- 泰盧固語:Hari Jujjavarapu, Sridhar L。