🚀 在 VS Code 中

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 設定編輯器,方法是使用命令 喜好設定:開啟使用者設定 (JSON) 或使用 "workbench.settings.editor" 設定變更預設設定編輯器。

我們本月進行的一項改進是透過將設定值描述 (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 部分 @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.server 以將 LSP 記錄傳送到 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 偵錯工具的內建元件。為了使用它,偵錯工具擴充功能需要以下列方式變更其偵錯工具介面卡

  • supportsLoadedSourcesRequest 功能新增至從 initialize 請求傳回的 Capabilities,其值為 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 時,註解面板會變為可見,並顯示提供給它的所有註解。註解依註解執行緒和資源分組。當在面板中選取註解時,會執行註解 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。