參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

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 月版。此版本中有許多重大更新,希望您會喜歡,其中一些主要亮點包括:

如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。
您還可以觀看 Cloud Developer Advocate Brian Clark 製作的 1.27 版本亮點影片

Insiders:想盡快看到新功能嗎?您可以下載每夜更新的 Insiders 構建版本,並第一時間嘗試最新的更新。有關最新的 Visual Studio Code 新聞、更新和內容,請在 Twitter 上關注我們 @code

工作臺

設定編輯器

在過去的幾個月中,我們一直在開發用於編輯設定的 GUI。在 1.27 版本中,我們將其設為預設設定編輯器。

Settings UI

您仍然可以透過使用命令首選項:開啟使用者設定 (JSON) 或透過使用"workbench.settings.editor"設定更改預設設定編輯器來訪問 JSON 設定編輯器。

我們本月做出的一項改進是透過將設定值描述 (enumDescriptions) 移動到自定義下拉控制元件中來清理 UI。

dropdown

已修改的設定現在用藍線表示,就像編輯器中已修改的行一樣。齒輪圖示會開啟一個上下文選單,其中包含一個選項,用於將設定重置為預設值。

modified indicator and context menu

設定值現在會進行驗證,並且會顯示任何驗證錯誤。

validation error

目錄現在在搜尋期間保持可見,並過濾以僅顯示具有匹配項的類別。您可以單擊類別以將結果過濾為該類別下的設定。如果您更喜歡在搜尋期間隱藏目錄,請將"workbench.settings.settingsSearchTocBehavior"設定為"hidden"

settings search

當您在設定中搜索時,我們由 Bing 提供支援的搜尋服務仍會提供它認為相關的結果。現在,該服務還會向您顯示 Marketplace 中具有相關設定的擴充套件。您將在設定搜尋結果底部看到一個按鈕,顯示匹配的擴充套件。單擊後,將開啟“擴充套件”檢視,其中顯示匹配的擴充套件。

extension settings

Windows 和 Linux 上的自定義標題欄和選單

在過去的幾次迭代中,我們一直在努力改進 Windows 和 Linux 上標題欄和選單的外觀、感覺和可用性。在此迭代中,我們正在刪除預覽標籤,目標是儘快將其設為 Windows 上的預設體驗。要啟用此功能,您可以將設定"window.titleBarStyle"設定為"custom"

Custom Title Bar and Menus

新體驗比預設體驗具有幾個優勢:

  • 整個產品中可主題化的標題欄、選單欄和上下文選單。這意味著您的深色主題保持深色!
  • 選單欄中更好的鍵盤導航。我們使使用鍵盤在選單之間切換和使用選單助記符變得更容易。
  • 侵擾性更小的選單欄。當將"window.menuBarVisibility"設定為"toggle"時,新體驗更緊湊,更不突兀。
  • 更好的可訪問性。已解決幾個可訪問性問題,以改善螢幕閱讀器對選單的可用性。

由於我們希望將這種新體驗設為 Windows 上的預設體驗,因此我們鼓勵您嘗試並向我們傳送反饋,以便我們提供最佳體驗。

麵包屑改進

我們調整了新的麵包屑欄,進行了各種改進,並修復了錯誤:

  • 聚焦的文件符號現在在編輯器中高亮顯示。
  • 當執行焦點命令 (⇧⌘; (Windows, Linux Ctrl+Shift+;)) 時,麵包屑會自動啟用。
  • 麵包屑在主題方面工作得更好。
  • 麵包屑現在遵守檔案排除配置。

Breadcrumbs Highlights

新終端選單

任務選單已重新命名為終端,並添加了一些整合終端的更多條目。

Terminal Menu

平臺特定鍵繫結

現在可以使用鍵繫結的when子句中的isLinuxisMacisWindows為特定作業系統啟用鍵盤快捷鍵。

[
  {
    "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 等其他程式或整合終端的命令)刪除或重新命名的檔案將不再關閉作為編輯器選項卡開啟的檔案。相反,檔案將指示它已從磁碟刪除,您可以只需儲存檔案即可將其恢復。

Deleted from Disk

注意:除非檔案已修改,否則檔案內容在重新啟動之間不會保留。

中鍵單擊在新編輯器中開啟檔案

現在可以在“資源管理器”檢視中使用滑鼠中鍵在新編輯器中開啟檔案,而不是在預覽模式中重用上一個編輯器。

輔助功能改進

我們修復了相當多的可訪問性問題 - 主要圍繞鍵盤導航、螢幕閱讀器支援和焦點。完整列表可以在此處找到。這是一項正在進行的工作,我們計劃在 9 月繼續進行。

改進的 Windows 後臺更新

我們對自定義 Windows 後臺更新程式進行了一些穩定性工作,以解決導致一些使用者安裝損壞的問題。這是一項持續的工作,將在即將釋出的版本中進行更多改進。

編輯器

自動關閉和包圍字元

當鍵入某些括號(如{[()時,根據程式語言,如果它們後面跟著通常不能開始表示式的特定字元(例如;:.,=}])>),它們將預設自動關閉。此行為可以透過editor.autoClosingBrackets設定進行自定義。同樣,可以透過editor.autoClosingQuotes在鍵入引號(如"'`)時自定義自動關閉行為。

當文字被選中並且您鍵入其中一個字元時,選擇將被括號或引號包圍。現在可以透過新的editor.autoSurround設定單獨調整此行為。

語言

CSS 匯入路徑補全

CSS、SCSS 和 Less @import的路徑補全現已可用。SCSS partial @import也得到了處理。

css-import

現在 CSS、SCSS 和 Less 中的@importurl()連結有跳轉到定義功能。

css-definition

JSON

內建 JSON 語言擴充套件現在支援新的JSON Schema Draft-07

最有趣的新增是ifthenelse關鍵字,以允許條件模式評估。

{
  "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"將在達到最大行長時換行屬性,並將所有換行行與第一個屬性對齊。

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.serverLSP 日誌傳送到 VS Code 輸出通道。

[langId].trace.server現在可以以機器可讀的JSON 格式輸出日誌資訊。

"languageServerExample.trace.server": {
  "format": "json", // or "text"
  "verbosity": "verbose" // or "off" | "messages"
}

這開啟了有趣的用例,例如將 LSP 日誌流式傳輸到LSP Inspector中以視覺化語言伺服器的行為。

lsp-streaming

您可以在Microsoft/language-server-protocol-inspectorlsp-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;
}

要顯示評論,擴充套件必須註冊DocumentCommentProviderWorkspaceCommentProvider

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,可以返回開啟文件的評論。在提供評論時,擴充套件會指定文件上的當前執行緒以及文件支援新增新評論的範圍。可以在文件中新增或回覆評論。

A comment within an editor

當首次註冊WorkspaceCommentProvider時,CommentsPanel變得可見並顯示提供給它的所有評論。評論按評論執行緒和資源分組。當在面板中選擇評論時,會執行評論command,因此擴充套件決定行為。

Comments panel

預覽功能

預覽功能尚未準備好釋出,但已足夠實用。我們歡迎您在這些功能開發期間提供早期反饋。

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 的貢獻

vscode-vsce 的貢獻

vscode-eslint 的貢獻

language-server-protocol 的貢獻

vscode-languageserver-node 的貢獻

debug-adapter-protocol 的貢獻

vscode-css-languageservice 的貢獻

vscode-html-languageservice 的貢獻

vscode-json-languageservice 的貢獻

node-jsonc-parser 的貢獻

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。