VS Codeのエージェントモードを拡張するには、を試してください!

2018年6月 (バージョン 1.25)

更新 1.25.1: この更新ではこれらの問題に対処しています。

ダウンロード: Windows: x64 | Mac: Intel | Linux 64ビット: deb rpm tarball | 32ビット: deb rpm tarball


Visual Studio Code 2018年6月リリースへようこそ。先月プレビューとして発表されたいくつかの機能が安定版に移行したことを大変嬉しく思います。主なハイライトの一部は次のとおりです。

これらのリリースノートをオンラインで読みたい場合は、code.visualstudio.com更新 にアクセスしてください。
Cloud Developer AdvocateのBrian Clarkによる、この1.25リリースのハイライトビデオもご覧いただけます。

リリースノートは、VS Codeの重点分野に関連する以下のセクションにまとめられています。さらに詳しい更新は以下の通りです。

  • ワークベンチ - 空のエクスプローラーへのファイルやフォルダーのドロップ、統一された履歴ナビゲーション。
  • エディター - スマートな候補選択、スニペットのプレースホルダ変換。
  • 言語 - フォルダー名変更時のJS/TSインポートの更新、CSSの疑似セレクターと疑似要素。
  • プレビュー機能 - Windowsでのユーザーセットアップ、WindowsとLinux用のカスタムツールとメニューバー。
  • 拡張機能の作成 - グリッドエディターレイアウトへの貢献、補完項目の事前選択。
  • 新しいコマンド - 新しいグリッドエディターレイアウトコマンドとキーボードショートカット。

Insiders: 新機能をいち早く見たいですか?夜間ビルドのInsidersをダウンロードして、最新の更新が利用可能になり次第試すことができます。そして、最新のVisual Studio Codeニュース、更新、コンテンツについては、Twitterの@codeをフォローしてください!

ワークベンチ

グリッドエディターレイアウト

エディターを垂直方向と水平方向の両方に配置できるようになり、3つ以上のエディターを並べて表示できるようになりました。

Grid Editor Layout

柔軟なレイアウトをサポートするために、空のエディターグループを作成できます。デフォルトでは、エディターグループの最後のエディターを閉じるとグループ自体も閉じられますが、新しい設定 workbench.editor.closeEmptyGroups: false でこの動作を変更できます。

Grid Empty

新しい表示 > エディターのレイアウトメニューには、あらかじめ定義されたエディターレイアウトのセットがあります。

Grid Editor Layout Menu

横に開くエディター (例えば、エディターツールバーのエディターの分割アクションをクリックするなど) は、デフォルトでアクティブなエディターの右側に開きます。アクティブなエディターの下にエディターを開きたい場合は、新しい設定 workbench.editor.openSideBySideDirection: down を構成してください。

キーボードだけでエディターレイアウトを調整するための新しいコマンドがたくさんありますが、マウスを使用したい場合は、ドラッグアンドドロップが任意方向にエディターを分割する速い方法です。

Grid Editor Drag and Drop

エディターグループは無制限になり、様々な方法で配置できるようになったため、開いているエディタービューではエディターグループを中央とラベル付けしなくなりました。代わりに、エディターグループは作成時間に応じて番号でラベル付けされるようになりました。最後に作成されたエディターグループは常に開いているエディターリストの最後に表示されます。これにより、レイアウト内でエディターグループを移動させてもリストの変更が最小限に抑えられる良いモデルであることがわかりました。

Grid Open Editors View

拡張機能やテーマへの影響については拡張機能の作成セクションを参照し、新しいグリッドエディターレイアウトコマンドのリストについては新しいコマンドを参照してください。

プロのヒント: Altキーを押しながらエディターを分割するツールバーアクションにカーソルを合わせると、別の向きに分割するオプションが表示されます。これは、右または下に素早く分割する方法です。

Grid Alt Click

グリッドレイアウトの作業により、中央揃えエディターレイアウトの動作を変更しました。

  • 中央揃えエディターレイアウト内で任意のエディターレイアウトを開くことができるようになりました。これにより、ユーザーにとってより柔軟性が高まります。
  • 中央揃えエディターレイアウトは、レイアウトに基づいて自動的に有効/無効にならなくなりました。これは時々混乱を招き、予期しない動作につながることがあったためです。

アウトラインビュー

アウトラインビューはプレビューを終了し、デフォルトで有効になりました。ファイルエクスプローラーの下部に別のセクションとして表示されます。展開すると、現在アクティブなエディターのシンボルツリーが表示されます。

アウトラインビューには、さまざまな並べ替えモード、オプションのカーソル追跡があり、通常のオープンジェスチャをサポートしています。また、入力するとシンボルを検索またはフィルターする入力ボックスも含まれています。エラーと警告もアウトラインビューに表示され、問題の場所が一目でわかります。

Outline view

アウトラインビューにはいくつかの設定があり、アイコンの有効/無効を切り替えたり、エラーや警告の表示を制御したりできます (すべてデフォルトで有効)。

  • outline.icons - アイコン付きでアウトライン要素をレンダリングするかどうかを切り替えます。
  • outline.problems.enabled - アウトライン要素にエラーと警告を表示します。
  • outline.problems.badges - エラーと警告にバッジを使用するかどうかを切り替えます。
  • outline.problems.colors - エラーと警告に色を使用するかどうかを切り替えます。

拡張機能作成者向けの新しいAPIもあります。

ポータブルモード

VS Codeはポータブルモードをサポートするようになりました。これにより、VS Codeによって作成・維持されるすべてのデータがインストールの近くに配置されます。これにより、USBドライブやファイル共有などを介して、環境間でVS Codeのセットアップを簡単に移動できます。ポータブルモードは、WindowsとLinuxのZIPダウンロード、およびmacOSの通常のアプリケーションダウンロードでサポートされています。詳細はこちらをクリックしてください。

空のファイルエクスプローラーにファイルやフォルダーをドロップする

空のエクスプローラーにファイル、フォルダー、VS Codeのワークスペースファイルをドロップして開くことができるようになりました。

empty drop

履歴ナビゲーション

入力履歴のナビゲーションが、VS Code全体でより自然で一貫性のあるものになりました。UpArrow (history.showPrevious) と DownArrow (history.showNext) キーを使用して、検索ビューと問題ビューの入力ボックス、およびエディター、ターミナル、Webビューの検索ウィジェットをナビゲートできます。

単純さと一貫性のため、入力ボックス間のナビゲーションのデフォルトのキーバインディングを、UpArrowDownArrowから、それぞれCtrl+UpArrow (macOSではCmd+UpArrow)とCtrl+DownArrow (macOSではCmd+DownArrow)に変更しました。いつでも⌘↑ (Windows, Linux Ctrl+Up)⌘↓ (Windows, Linux Ctrl+Down)⌘↑ (Windows, Linux Ctrl+Up)のキーバインディングを更新することで、以前の動作に戻すことができます。

注意: 既存の18個の履歴ナビゲーションコマンドをすべて削除し、history.showPrevioushistory.showNextの2つのコマンドに統一しました。

エディター

ホバー表示オプション

一部のユーザーは、エディター内のテキストを覆うホバーの提案がないことを好むため、エディターのホバーは3つの追加設定でカスタマイズできるようになりました。editor.hover.enabled を使用してエディターのホバーを切り替え、editor.hover.delay を使用してホバーが表示されるまでの時間をカスタマイズし、editor.hover.sticky を使用してマウスをその上に移動したときにホバーが表示されたままになるかどうかを変更します。

サブワードのサポート

サブワードナビゲーションとサブワード削除のための新しいコマンドがあります。これらのコマンドは、キャメルケースの位置とアンダースコア (_) で停止します。

editor sub-word navigation

以下は、それらをバインドする方法の例です。

{ "key": "ctrl+alt+right",          "command": "cursorWordPartRight",
                                       "when": "textInputFocus" },
{ "key": "ctrl+shift+alt+right",    "command": "cursorWordPartRightSelect",
                                       "when": "textInputFocus" },
{ "key": "ctrl+alt+left",           "command": "cursorWordPartStartLeft",
                                       "when": "textInputFocus" },
{ "key": "ctrl+shift+alt+left",      "command": "cursorWordPartStartLeftSelect",
                                       "when": "textInputFocus" },
{ "key": "ctrl+alt+backspace",       "command": "deleteWordPartLeft",
                                       "when": "textInputFocus && !editorReadonly" },
{ "key": "ctrl+shift+alt+backspace", "command": "deleteWordPartRight",
                                       "when": "textInputFocus && !editorReadonly" },

候補の選択

言語IntelliSenseプロバイダーは、どの提案が最適かをしばしば知っており、このバージョンのVS Codeでは、提案を事前に選択できるようになりました。事前選択された提案のための新しいAPIがあり、利用可能な場合、エディターはリストの最初の提案ではなく、その提案を選択します。

suggestion selection

スニペットのプレースホルダ変換

スニペットはついにプレースホルダ変換をサポートしました。プレースホルダ変換は変数変換に似ていますが、より動的です。変換は、あるプレースホルダから次のプレースホルダに切り替えるときに適用され、その文法ルールは次のとおりです: ${int/regex/format_string/opts}

以下は、「Hello World」をドイツ語の対応するものに置き換えるサンプルです。

"HelloWorld": {
  "prefix": "say_hello",
  "body": "${1} ${2} -> ${1/Hello/Hallo/} ${2/World/Welt/}"
}

snippet placeholder transformation

詳細と変換の全潜在能力を解放する方法については、スニペット文法を参照してください。

統合ターミナル

パフォーマンスの向上

統合ターミナルのパーサーは、ANSI準拠性を高め、受信データの処理速度を約30%向上させるために、ゼロから書き直されました。これは、xterm.jsへのアップストリームのコミュニティ貢献として提供されました。

太字テキストの明るい色の設定

ターミナルは現在、すべての太字テキストを明るい色のバリアントを使用するように変換します。これはターミナルエミュレーター間で少し一貫性がなく、主に歴史的な理由によるものです。この自動変換をオフにして、太字テキストに明るくない色を使用できるようになりました。

{
  "terminal.integrated.drawBoldTextInBrightColors": false
}

これは、xterm.jsへのアップストリームのコミュニティ貢献として提供されました。

デバッグ

フローティングデバッグツールバー

前のマイルストーンで、デバッグツールバーをデバッグビューにドッキングする新しい設定 ("debug.toolBarLocation": "docked") を導入しました。このマイルストーンでは、ユーザーのフィードバックをレビューし、フローティングツールバーの動作 ("debug.toolBarLocation": "floating") も改善しようと試みました。

フィードバックからのコンセンサスは、ツールバーが常に表示されるべきであり (どのビューがアクティブかに関わらず)、何も隠すべきではない (例えばエディタータブなど) というものでした。そのため、フローティングツールバーをエディター領域にドラッグできるようにすることで「鎖を解き放ち」ました。これにより、エディタータブを多用しつつもデバッグツールバーを常に表示したいユーザーの助けになるはずです。

debug toolbar

既存の debug.hideActionBar 設定は、debug.toolBarLocation 設定の値 hidden によって処理されるため、debug.hideActionBar削除します。

言語

TypeScript 2.9.2

VS CodeにはTypeScript 2.9.2が同梱されるようになりました。このマイナーリリースでは、多数のバグが修正され、安定性が向上しています。変更点の完全なセットはこちらで読むことができます。

フォルダ名変更時のインポートパスの更新

前回のリリースでは、JavaScriptまたはTypeScriptファイルを移動または名前変更した際に、インポートパスが自動的に更新されるようになりました。この機能は、ディレクトリを移動または名前変更した場合にも機能するようになりました。再度、デフォルトではVS Codeはパスを更新できるかどうかを尋ねてきます。このプロンプトの動作は、javascript.updateImportsOnFileMove.enabledtypescript.updateImportsOnFileMove.enabled 設定で制御できます。

有効な値は以下の通りです。

  • "prompt" - デフォルト。パスを更新するかどうかを尋ねます。
  • "always" - 常にパスを自動的に更新します。
  • "never" - パスを自動的に更新せず、プロンプトも表示しません。

階層的なMarkdownドキュメントシンボル

組み込みのMarkdownサポートは、新しいDocumentSymbol APIを使用して、Markdownヘッダーがアウトラインビューで適切にネストされるようにします。

The Outline view for a Markdown document

MDNからの新しいCSS疑似セレクターと疑似要素

4月のリリースで、最新のCSS/SCSS/LessサポートのためにMozilla Developer Networkからデータを取得し始めました。このリリースでは、以下の疑似セレクター/要素を追加しました。

  • :defined | :dir | :focus-visible | :focus-within | :placeholder-shown
  • ::-moz-range-progress | ::-moz-range-thumb | ::-moz-range-track | ::-webkit-progress-inner-value | ::grammar-error | ::placeholder

CSS Pseudo Selectors and Elements

ブラウザ互換性データの精度の向上

mdn/browser-compat-dataのおかげで、MDNのこのセクションをCSS/SCSS/Lessの補完機能に取り込みました。

CSS justify-items

justify-itemsプロパティは、CSS Grid Layoutの他の多くのCSSプロパティと同様に、Edgeのバージョン16からサポートされています。MDNからデータを取得することで、VS CodeはCSS機能のブラウザ互換性データを最新の状態に保ちます。

未知のAt-Rulesの適切な処理

CSSプリプロセッサを使用している人々は、ビルド時に有効なCSSにコンパイルされるカスタムのat-ruleを使用することがあります。以前は、VS Codeはそのようなat-ruleを解析したり処理したりできませんでした。このリリースでは、at-ruleのサポートを改善し、それらが

  • CSS構文に従っているため、正しい構文ハイライトを受け取ります。
  • 誤った場所でエラーを生成しなくなりました。
  • css.lint.unknownAtRulesで制御できる正しいエラーを生成します。

CSS Unknown At-Rules

拡張機能

拡張機能ビューの新しいデフォルトビュー

これまで、拡張機能ビューのデフォルトビューには、インストール済み拡張機能のセクションと、推奨拡張機能のセクションが含まれていました。有効な拡張機能の中にインストール済みだが無効な拡張機能が存在するため、後者との対話が困難でした。今回、新しいデフォルトを提供します。まず有効な拡張機能が表示され、次に推奨拡張機能のセクションがあり、一番下に無効な拡張機能の折りたたまれたセクションがあります。

Default Extensions View

拡張機能ビューのコンテキストメニューを使用して、これらのセクションの順序変更、折りたたみ/展開、または非表示をいつでも行うことができます。また、表示メニューのビューを開く...コマンドを使用して、これらのセクションを表示/非表示にすることもできます。

Customize Extensions View

拡張機能の推奨を非表示にする

開いているファイルやワークスペース環境に基づいて拡張機能をお勧めします。すべての推奨があなたのプロジェクトに適しているわけではないことを理解しており、特定の推奨を非表示にできるようになりました。

推奨を非表示にするには、拡張機能の項目をクリックして詳細ペインを開き、推奨を無視ボタンを押します。無視された推奨は今後あなたに推奨されなくなります。

Dismiss Recommendations

ワークスペースの推奨を管理する

extensions.jsonファイルでワークスペースの推奨を使用して、ワークスペースのユーザーに推奨される拡張機能のセットをすでに構成できました。これらの推奨の管理がはるかに簡単になりました。拡張機能ビューで任意の拡張機能をクリックして詳細ペインを開きます。その後、以下の新しいコマンドを使用して推奨を追加したり、ワークスペースのユーザーに推奨したくない特定の拡張機能を禁止したりできます。

  • 拡張機能: 推奨拡張機能に追加 (ワークスペース)
  • 拡張機能: 推奨拡張機能に追加 (ワークスペースフォルダー)
  • 拡張機能: 推奨拡張機能を無視 (ワークスペース)
  • 拡張機能: 推奨拡張機能を無視 (ワークスペースフォルダー)

言語パック

VS Codeは現在、表示言語として英語のみを同梱しており、他の言語はVS Code Marketplaceからインストール可能な言語パックに依存しています。VS Codeの1.23または1.24バージョンでプロンプトが表示されたときに言語パックをインストールした場合、この変更に気づかないはずです。古いバージョンのVS Codeからアップグレードしている場合、または新規インストールの場合、OSのUI言語の言語パックをインストールするように促すプロンプトが表示されます。追加の言語パックは、拡張機能ビュー(⇧⌘X (Windows、Linux Ctrl+Shift+X))を使用してMarketplaceからインストールできます。

要約すると

  • VS Codeバージョン1.22以前から1.25にアップデートすると、表示言語は英語になり、Marketplaceで利用可能な場合、OSのUI言語用の言語パックをインストールするように促されます。
  • 1.23または1.24から1.25にアップデートした場合、UI言語用の言語パックをインストールするように既に促されているはずです。そうした場合、1.25は通常通り起動し、表示言語は選択されたUI言語として表示されます。言語パックをインストールしなかった場合は、インストールするように促されます。
  • VS Codeのバージョン1.25以降の新規インストールでは、Marketplaceで適切な言語パックが利用可能な場合、インストールを促されます。

プレビュー機能

プレビュー機能はリリース準備ができていませんが、使用できる程度には機能しています。開発段階での皆様の早期フィードバックをお待ちしております。

新しい設定エディター

このマイルストーンでは、設定を編集するためのGUIの作業を続けました。まだプレビューですが、試してみたい場合は、基本設定: 設定を開く (プレビュー) コマンドで開くことができます。フィードバックをお待ちしております。ご意見はこちらのGitHub issueにお願いします。

New Settings Editor

先月と比較した新しい変更点の一部は以下の通りです。

  • 設定を新しいカテゴリに整理する「目次」(TOC)。
  • 設定行のレイアウトが整理され、リフレッシュされました。
  • 「リセット」ボタンが削除されました - 設定をデフォルト値に編集すると、settings.jsonから削除されます。

また、"workbench.settings.settingsSearchTocBehavior"設定を試して、設定検索中の「目次」の3つの異なるオプション(show, hide, filter)を確認し、どのオプションが好みかお知らせください。

Windows向けユーザーセットアップ

Windowsユーザーは、インストールに管理者権限を必要としない新しいプレビューセットアップパッケージを利用できるようになりました。このセットアップパッケージは、よりスムーズなバックグラウンド更新体験も提供します。この機能は今のところInsidersでのみ利用可能です。7月中にさらにフィードバックをいただき、安定版ユーザーベースに最高の体験を提供できるようにしたいと考えています。

Insidersユーザーセットアップパッケージのダウンロードリンクはこちらです。

Windows/Linux向けのカスタムタイトルバーとメニュー

WindowsとLinuxのユーザーは、window.titleBarStyle設定値customを使用できるようになり、それに合わせて新しいメニューバーを実装しました。この設定はまだデフォルトでは有効になっていませんが、window.titleBarStyle設定で有効にできます。

WindowsとLinuxでこの設定を有効にすると、古いメニューバーが、ライトまたはダークテーマに合わせた新しいメニューバーに置き換えられます。新しいメニューバーには、矢印キーによるトップレベルのキーボードナビゲーションなどの機能強化も含まれています。最後に、製品全体のメニューも新しいメニューバーに合わせて表示されます。

Custom title bar and menu bar

新しいメニューとタイトルバーの改善を続け、workbench-title または workbench-menu ラベルが付けられた問題に対処していきます。

ターミナル: 動的テクスチャアトラス

ターミナルキャンバス用の新しい「動的テクスチャアトラス」を有効にするための実験的な設定が追加されました。これにより、ターミナルが文字グリフを保存するために使用するキャッシュ戦略が変更されます。デフォルトの背景上の固定されたグリフセットではなく、グリフは必要に応じて、また使用される背景に関係なくテクスチャアトラスに追加されるようになりました。これにより、最初のターミナル起動時間が短縮され、デフォルトの背景を使用しない文字のレンダリング時間が短縮され、全体的なレンダリングパフォーマンスが向上するはずです。

これは最終的にデフォルトになりますが、今のところ以下の設定でオプトインできます。

{
  "terminal.integrated.experimentalTextureCachingStrategy": "dynamic"
}

これは、xterm.jsへのアップストリームのコミュニティ貢献として提供されました。

拡張機能の作成

グリッドエディターレイアウト: ViewColumn

新しいグリッドエディターレイアウト機能をサポートするためのAPI調整はわずかです。最も注目すべきは、アクティブなエディターの横にエディターを開くために使用できる新しいViewColumn.Besideアクションがあることです。グリッドエディターレイアウトでは、開かれるエディターの数に制限がなくなったため、このオプションを使用すると、既に横にスペースがない限り、常にアクティブなエディターの横に新しいエディターが作成されます。ユーザー設定workbench.editor.openSideBySideDirectionに応じて、これはエディターの右または下になります。

テキストエディターとWebビューの ViewColumn の値は、以下に示すように、エディター領域の左から右への出現順に従います。

Grid Editor Numbering

ViewColumn列挙型はViewColumn.Nineまで拡張されましたが、TextEditorはグリッド内に含まれている限り、常にビュー列として番号が割り当てられます。

エディターグループが移動されたり、エディターグループが閉じられたりすると、以前と同様にonDidChangeTextEditorViewColumnイベントが発生します。

グリッドエディターレイアウト: 新しいコマンド

新しいグリッドエディターレイアウトをサポートするためのAPIへの変更は最小限ですが、拡張機能は追加された新しいコマンドを活用することで、グリッドエディターレイアウトを利用できます(新しいコマンドセクションで完全な概要を参照してください)。

新しい `vscode.setEditorLayout` は、単一のコマンドと引数でエディター全体のレイアウトを変更できるため、少し説明が必要です。レイアウトは、初期の(オプションの)向き(`0` = 水平、`1` = 垂直)と、その中のエディター `groups` の配列を持つオブジェクトとして記述されます。各エディターグループは、`size` と、向きに対して直交してレイアウトされる別のエディター `groups` の配列を持つことができます。エディターグループのサイズが指定されている場合、行または列ごとに適用されるためには、それらの合計が `1` になる必要があります。

2x2グリッドの例

{
  "orientation": 0,
  "groups": [
    { "groups": [{}, {}], "size": 0.5 },
    { "groups": [{}, {}], "size": 0.5 }
  ]
}

デフォルトでアクティブなViewColumnでエディターを開く

テキストエディターやWebビューを開く際にViewColumnが指定されていない場合、VS Codeはデフォルトで現在アクティブなエディターグループで開くようになりました。以前はViewColumn.Oneで開かれていました。以前の動作を維持したい場合は、開く際にViewColumn.Oneを渡してください。

事前選択された補完項目

補完項目を提供する拡張機能は、それらを「事前選択済み」としてマークできるようになりました。これは、多くの補完が存在するが、一部がより選択される可能性が高い場合に便利です。この例としては、ユーザーが既知の変数型を割り当てている場合が挙げられます。この機能により、拡張機能は、console.dirxmlよりもconsole.logを優先するなど、より一般的に使用される補完を選択することもできます。

APIの追加は'CompletionItem#preselect: boolean'で、多くの事前選択項目が存在する場合、最もランクの高いものが選択されます。

ドキュメントシンボル

新しいアウトラインビューツリーを最大限に活用するために、拡張機能はDocumentSymbolProvidersを修正してDocumentSymbolsを返す必要があります。これは新しく追加された型で、アウトラインツリーのニーズに合わせて調整されています。ドキュメントシンボルの階層表現をサポートし、シンボルを定義する範囲とシンボルを識別する選択範囲を区別できます。


         +--/**
         |   * Some Comment
<range>--|   */
         |  export function fooFunction() {
         |                  +----------+
         +--}                   |
                                |
                          <selection range>

読み取り専用ファイルシステムプロバイダー

ファイルシステムプロバイダーを readonly として登録できるようになりました。VS Code はこのフラグを尊重し、そのファイルシステムプロバイダーから来るリソースに対するすべての変更コマンドを無効にします。エディターもそれらの読み取り専用リソースに対して読み取り専用モードで開かれます。

カスタムビュー

ツリービューの可視性

ツリービューが表示されているかどうかを、TreeViewに新しく追加された以下のプロパティとイベントを使用して確認できるようになりました。

/**
 * `true` if the [tree view](#_TreeView) is visible otherwise `false`.
 */
readonly visible: boolean;

/**
 * Event that is fired when [visibility](TreeView.visible) has changed
 */
readonly onDidChangeVisibility: Event<TreeViewVisibilityChangeEvent>;

/**
 * The event that is fired when there is a change in [tree view's visibility](#_TreeView.visible)
 */
export interface TreeViewVisibilityChangeEvent {

  /**
   * `true` if the [tree view](#_TreeView) is visible otherwise `false`.
   */
  readonly visible: boolean;

}

選択リスナー

ツリービューに新しい選択変更イベントが追加され、選択の変更をリッスンできるようになりました。

/**
 * Event that is fired when the [selection](#_TreeView.selection) has changed
 */
readonly onDidChangeSelection: Event<TreeViewSelectionChangeEvent<T>>;

/**
 * The event that is fired when there is a change in [tree view's selection](#_TreeView.selection)
 */
export interface TreeViewSelectionChangeEvent<T> {

  /**
   * Selected elements.
  */
  readonly selection: T[];

}

表示とフォーカス

reveal APIを呼び出す際にフォーカスオプションを true に設定することで、ツリービュー内の要素を表示してフォーカスできるようになりました。

reveal(element: T, options?: { select?: boolean, focus?: boolean }): Thenable<void>;

新しいテーマの色

グリッドエディターレイアウトのサポート作業から生まれた機能として、空のエディターグループの背景色に2つの新しいテーマカラーが追加されました。

  • editorGroup.emptyBackground: 空のエディターグループの背景色。
  • editorGroup.focusedEmptyBorder: フォーカスされている空のエディターグループの境界線の色。

Grid Editor Group Background

  • editorPane.background: 中央揃えエディターレイアウトの左右に表示されるエディターペインの背景色。

Editor Pane Background

非推奨のテーマカラー

グリッドエディターレイアウト機能の導入に伴い、テーマカラー editorGroup.background はサポートされなくなりました。

名前変更コマンド

rename-command (editor.action.rename) は、UriPosition を付けて呼び出すことができるようになり、エディターはそれに応じて名前変更操作を開始します。例:

vscode.commands.executeCommand('editor.action.rename', [
  vscode.Uri.file('/my/file.abc'),
  new vscode.Position(14, 7)
]);

DiagnosticTag

診断タグを使用すると、拡張機能は診断に関する追加のメタデータを添付できます。VS Codeはこのメタデータを使用して、これらの診断の表示方法を調整します。

const diag = new vscode.Diagnostic(new Range(0, 0, 0, 10), 'Unused');
diag.tags = [vscode.Diagnostic.Unnecessary];

DiagnosticTag.Unnecessaryは、診断が参照されていない、または到達不能なソースコードに対するものであることを示します。DiagnosticTag.Unnecessaryでマークされたソースコードは、フェードアウトして表示されます。フェードアウトの量は"editorUnnecessaryCode.opacity"テーマカラーで制御されます。例えば、"editorUnnecessaryCode.opacity": "#000000c0"は、コードを75%の不透明度でレンダリングします。ハイコントラストテーマの場合、"editorUnnecessaryCode.border"テーマカラーを使用して、フェードアウトする代わりに不要なコードに下線を引きます。

WebviewPanel.active と WebviewPanel.visible

Webviewパネルには2つの新しい読み取り専用プロパティがあります。

  • active - パネルがフォーカスされているときを追跡します。
  • visible - パネルが画面上にあるときを追跡します。

Webviewの永続性

Webview APIは、Webviewの状態を保存および復元するサポートで拡張されました。

Webviewコンテキスト内の `getState` と `setState` APIにより、Webviewは状態を保存し、Webview自体がバックグラウンドタブになっても永続化される状態オブジェクトを取得できます。

// Inside a webview's JavaScript
const vscode = acquireVsCodeApi();

// Look up old state (will be undefined if no state is set)
const oldState = vscode.getState();

// Update the persisted state.
// You can save off any json serializable object.
if (oldState) {
  vscode.setState({ count: oldState.count + 1 });
} else {
  vscode.setState({ count: 1 });
}

さらに、拡張機能はWebviewPanelSerializerを登録でき、これにより特定のタイプのWebviewがVS Codeの再起動後も永続化されるようになります。これを有効にするには、拡張機能はアクティベーションメソッドでvscode.window.registerWebviewPanelSerializerを呼び出す必要があります。

export function activate(context: vscode.ExtensionContext) {
    ...

    vscode.window.registerWebviewPanelSerializer('myWebviewType', {
        async deserializeWebviewPanel(webviewPanel: vscode.WebviewPanel, state: any) {
            // `state` is the state persisted using `setState` inside the webview
            console.log(`Got state: ${state}`);

            new MyWebview(webviewPanel);
        }
    });
}

拡張機能は、`onWebviewPanel` アクティベーションイベントも追加する必要があります。

"activationEvents": [
    ...,
    "onWebviewPanel:catCoding"
]

新しいWebview永続化APIは、Webview拡張機能作成ページに記載されています。Webview拡張機能の例も、これらの新しいAPIの使用方法を示しています。

言語パック: 最小限の翻訳

VS Codeは、利用可能な言語パックをその言語パックの言語でユーザーに提示するようになりました。以下は、簡体字中国語と英語で簡体字中国語の言語パックを推奨する例です。

Language Pack recommendation

この表示には、言語パックの作成者が言語パック内で以下の最小限の翻訳文字列を翻訳する必要があります。

{
   showLanguagePackExtensions: localize('showLanguagePackExtensions', "Search language packs in the Marketplace to change the display language to {0}."),
   searchMarketplace: localize('searchMarketplace', "Search Marketplace"),
   installAndRestartMessage: localize('installAndRestartMessage', "Install language pack to change the display language to {0}."),
   installAndRestart: localize('installAndRestart', "Install and Restart")
}

Language Server Protocol Inspector

vscode-languageclientを使用する言語サーバーは、ロギングサポートを受けるために[langId].trace.server設定を指定できます。生成されたログはVS Codeと言語サーバー間のLSP通信を理解する上で貴重ですが、ログは長くなりがちで有用な情報を抽出するのが難しい場合があります。

新しいLSP Inspectorを使えば、LSPログを理解するのに役立つツールが手に入ります: https://microsoft.github.io/language-server-protocol/inspector/

Inspectorでは、以下のことができます。

  • 言語クライアントとサーバー間のリクエスト、レスポンス、通知をスキャンします。
  • 検索や定義済みのフィルターを使用してログをフィルタリングし、有用な情報を見つけます。

LSP Inspector

Inspectorは言語拡張機能のデバッグに役立ちます。ユーザーにバグレポートにLSPログを添付してもらい、Inspectorを使用してログを分析することができます。

言語サーバーガイドは、ロギングサポートとLSP Inspectorの機能に関するセクションを含むように更新されました。

言語サーバー: エンドツーエンドテスト

エンドツーエンドテストに関するセクションが言語サーバーガイドに追加されました。

言語サーバーのコンポーネントを単体テストするのと比較して、エンドツーエンドテストはVS Codeでワークスペースを開き、拡張機能ホストで言語拡張機能を起動し、言語拡張機能の実際の動作に対してアサーションを行います。これにより、ワークスペースとVS Codeの状態のモックが容易になり、実際のVS Codeの動作を確認できます。

言語サーバー: ガイドの刷新

言語サーバーガイドがリフレッシュされました。主な改善点は次のとおりです。

  • 前述のロギングとテストに関するセクション。
  • Language Server Protocol、Language Server、およびそれらの関係についての説明。
  • LSPとLanguage Serverの図を更新しました。
  • lsp-sampleサンプルコードを更新しました。
  • LSPウェブサイトへの参照を増やしました。

提案された拡張API

各マイルストーンには新しい提案APIが付属しており、拡張機能開発者はこれらを試すことができます。いつものように、皆様からのフィードバックをお待ちしております。提案APIを試すには、次の手順を実行します。

  • 提案APIは頻繁に変更されるため、Insiders版を使用する必要があります。
  • 拡張機能のpackage.jsonファイルに次の行が必要です: "enableProposedApi": true
  • vscode.proposed.d.tsファイルの最新バージョンをプロジェクトにコピーします。

提案APIを使用する拡張機能は公開できないことに注意してください。次回のリリースでは互換性のない変更が行われる可能性があり、既存の拡張機能を壊すことは決して望ましくありません。

WorkspaceEditでファイルの作成/名前変更/削除が可能に

WorkspaceEditを拡張し、ファイルやフォルダーの作成、名前変更、削除に使用できるようにする提案APIを追加しました。これは、型の名前変更時にファイルの名前を変更するなど、複雑なリファクタリングに役立ちますが、他のシナリオも可能にするはずです。

ローカル名前変更イベント

名前変更が発生する前後に発生する2つのイベント、onWillRenameFileonDidRenameFileを提案しています。これらは拡張機能が名前変更に反応したり参加したりすることを可能にします。

QuickInput API

新しいQuickPickおよびInputBox APIは、既存のshowQuickPickおよびshowInputBox APIよりも柔軟なユーザー入力の収集を可能にします。新しいAPIでは、入力オブジェクトの新しいインスタンスを作成し、その上でイベントハンドラーを登録し、ユースケースに応じてプロパティを設定します。

export namespace window {
  export function createQuickPick<T extends QuickPickItem>(): QuickPick<T>;
  export function createInputBox(): InputBox;
}

QuickInput APIの使用例はサンプル拡張機能にあります。

複数ステップの入力サンプル

Multi-step input sample

既存の showQuickPickshowInputBox API が十分に柔軟でない場合は、新しい QuickPickInputBox API を使用してください。そうでなければ、既存のものの方が早く仕事を終えられるので、そちらを使い続けてください。

フィードバックや議論は、issue #53327 を使用してください。

ターミナルレンダラー

ターミナル「レンダラー」の概念が提案されています。ターミナルレンダラーは基本的にターミナルパネル内のターミナルインスタンスですが、バックエンドプロセスを持たず、代わりに拡張機能がプロセスとして機能します。これは、VS Code内でターミナルマルチプレクサを実装するのに役立ちます。この場合、拡張機能はいくつかのプロセスの入出力パイプにアクセスでき、それらがターミナルレンダラーに接続されます。Live Share拡張機能は、この新しいAPIを使用して共有ターミナルサポートの安定性と保守性を向上させる予定です。

export namespace window {
  export function createTerminalRenderer(name: string): TerminalRenderer;
}

export interface TerminalRenderer {
  name: string;
  dimensions: TerminalDimensions | undefined;
  readonly maximumDimensions: TerminalDimensions | undefined;
  readonly terminal: Terminal;
  readonly onDidAcceptInput: Event<string>;
  readonly onDidChangeMaximumDimensions: Event<TerminalDimensions>;
  write(text: string): void;
}

export interface TerminalDimensions {
  readonly columns: number;
  readonly rows: number;
}

別の使用例として、拡張機能が独自のREPLを作成する場合があります。これは、拡張機能がすべての文字入力をリッスンし、Enterキーが押されたときにアクションを起こすことで機能します。

const shell = vscode.window.createTerminalRenderer('My Extension REPL');
shell.write('Type and press enter to echo the text\r\n\r\n');
shell.terminal.show();

let line = '';
shell.onDidAcceptInput(data => {
  if (data === '\r') {
    shell.write(`\r\necho: "${line}"\r\n\n`);
    line = '';
  } else {
    line += data;
    shell.write(data);
  }
});

アクティブなターミナルの追跡

window.activeTextEditorwindow.onDidChangeActiveTextEditor と同様に、アクティブなターミナルを追跡可能にする統合ターミナル用の新しい拡張APIを提案しています。

export namespace
  export const activeTerminal: Terminal | undefined;
  export const onDidChangeActiveTerminal: Event<Terminal | undefined>;
}

Terminal.onDataの名前が変更されました

Terminal.onDataは、命名ガイドラインに合わせるため、onDidWriteDataに名前が変更されました。

export interface Terminal {
  onDidWriteData: Event<string>;
}

定義リンクにより、定義プロバイダーは定義と共に追加のメタデータを返すことができます。

export interface DefinitionLink {
  /**
   * Span of the symbol being defined in the source file.
   *
   * Used as the underlined span for mouse definition hover. Defaults to the word range at
   * the definition position.
   */
  origin?: Range;

  /**
   * The resource identifier of the definition.
   */
  uri: Uri;

  /**
   * The full range of the definition.
   *
   * For a class definition for example, this would be the entire body of the class definition.
   */
  range: Range;

  /**
   * The span of the symbol definition.
   *
   * For a class definition, this would be the class name itself in the class definition.
   */
  selectionRange?: Range;
}

この追加情報は、VS Codeによって定義に移動アクションのユーザーエクスペリエンスを向上させるために使用されます。

DefinitionLinkを使用するには、DefinitionProviderは現在provideDefinition2メソッドを実装する必要があります。DefinitionLink APIが安定したら、provideDefinition2を削除し、通常のDefinitionProvider.provideDefinitionメソッドを更新してDefinitionLinkも返せるようにする予定です。

新コマンド

キー コマンド コマンドID
⌘K ⌘\ (Windows, Linux Ctrl+K Ctrl+\) openSideBySideDirectionで設定された直交方向にエディターを分割する workbench.action.splitEditorOrthogonal
アクティブなエディターグループで開いているエディターを表示する workbench.action.showEditorsInActiveGroup
⌃⌘9 (Windows, Linux Shift+Alt+9) アクティブなエディターを最後のエディターグループに移動する workbench.action.moveEditorToLastGroup
⌘K ↑ (Windows, Linux Ctrl+K Up) アクティブなエディターグループを上に移動する workbench.action.moveActiveEditorGroupUp
⌘K ↓ (Windows, Linux Ctrl+K Down) アクティブなエディターグループを下に移動する workbench.action.moveActiveEditorGroupDown
最後のエディターグループにフォーカスする workbench.action.focusLastEditorGroup
最初のエディターグループにフォーカスする workbench.action.firstEditorInGroup
⌘W (Windows Ctrl+F4, Linux Ctrl+W) アクティブなエディターグループを閉じる(開いているエディターは隣のグループにマージされます) workbench.action.closeGroup
すべてのエディターグループを閉じる workbench.action.closeAllEditorGroups
アクティブなエディターグループとそのエディターを閉じる workbench.action.closeEditorsAndGroup
⌘K ⌘\ (Windows, Linux Ctrl+K Ctrl+\) アクティブなエディターを上に分割 workbench.action.splitEditorUp
⌘K ⌘\ (Windows, Linux Ctrl+K Ctrl+\) アクティブなエディターを下に分割 workbench.action.splitEditorDown
⌘K ⌘\ (Windows, Linux Ctrl+K Ctrl+\) アクティブなエディターを左に分割 workbench.action.splitEditorLeft
⌘K ⌘\ (Windows, Linux Ctrl+K Ctrl+\) アクティブなエディターを右に分割 workbench.action.splitEditorRight
すべてのエディターグループのエディターをアクティブなものに統合する workbench.action.joinAllGroups
⌘4 (Windows, Linux Ctrl+4) 4番目のエディターグループにフォーカスする(必要に応じて新しいエディターグループを作成します) workbench.action.focusFourthEditorGroup
⌘5 (Windows, Linux Ctrl+5) 5番目のエディターグループにフォーカスする(必要に応じて新しいエディターグループを作成します) workbench.action.focusFifthEditorGroup
⌘6 (Windows, Linux Ctrl+6) 6番目のエディターグループにフォーカスする(必要に応じて新しいエディターグループを作成します) workbench.action.focusSixthEditorGroup
⌘7 (Windows, Linux Ctrl+7) 7番目のエディターグループにフォーカスする(必要に応じて新しいエディターグループを作成します) workbench.action.focusSeventhEditorGroup
⌘8 (Windows, Linux Ctrl+8) 8番目のエディターグループにフォーカスする(必要に応じて新しいエディターグループを作成します) workbench.action.focusEighthEditorGroup
アクティブなエディターを左のエディターグループに移動 workbench.action.moveEditorToLeftGroup
アクティブなエディターを右のエディターグループに移動 workbench.action.moveEditorToRightGroup
アクティブなエディターを上のエディターグループに移動 workbench.action.moveEditorToAboveGroup
アクティブなエディターを下のエディターグループに移動 workbench.action.moveEditorToBelowGroup
⌘K ⌘← (Windows, Linux Ctrl+K Ctrl+Left) 左のエディターグループにフォーカスする workbench.action.focusLeftGroup
⌘K ⌘→ (Windows, Linux Ctrl+K Ctrl+Right) 右のエディターグループにフォーカスする workbench.action.focusRightGroup
⌘K ⌘↑ (Windows, Linux Ctrl+K Ctrl+Up) 上のエディターグループにフォーカスする workbench.action.focusAboveGroup
⌘K ⌘↓ (Windows, Linux Ctrl+K Ctrl+Down) 下のエディターグループにフォーカスする workbench.action.focusBelowGroup
左に新しいエディターグループを作成 workbench.action.newEditorGroupLeft
右に新しいエディターグループを作成 workbench.action.newEditorGroupRight
上に新しいエディターグループを作成 workbench.action.newEditorGroupAbove
下に新しいエディターグループを作成 workbench.action.newEditorGroupBelow
エディターレイアウトに切り替え: シングル workbench.action.editorLayoutSingle
エディターレイアウトに切り替え: 2列 workbench.action.editorLayoutTwoColumns
エディターレイアウトに切り替え: 3列 workbench.action.editorLayoutThreeColumns
エディターレイアウトに切り替え: 2行 workbench.action.editorLayoutTwoRows
エディターレイアウトに切り替え: 3行 workbench.action.editorLayoutThreeRows
エディターレイアウトに切り替え: 2x2グリッド workbench.action.editorLayoutTwoByTwoGrid
エディターレイアウトに切り替え: 2列 (下) workbench.action.editorLayoutTwoColumnsBottom
エディターレイアウトに切り替え: 2列 (右) workbench.action.editorLayoutTwoColumnsRight
エディターレイアウトに切り替え: 中央揃え workbench.action.editorLayoutCentered

新しい `layoutEditorGroups` コマンド

layoutEditorGroupsコマンドを使用すると、エディターグループのレイアウトを作成し、それにキーバインディングを割り当てることができます。レイアウトは、初期(オプション)の向き(0 = 水平、1 = 垂直)と、その中のエディターgroupsの配列を持つオブジェクトとして記述されます。各エディターグループは、sizeと、向きに対して直交してレイアウトされる別のエディターgroupsの配列を持つことができます。エディターグループのサイズが指定されている場合、行または列ごとに適用されるには、その合計が1でなければなりません。例:

{
  "key": "Ctrl+0",
  "command": "layoutEditorGroups",
  "args": {
    "orientation": 1,
    "groups": [{ "size": 0.2 }, { "size": 0.6 }, { "size": 0.2, "groups": [{}, {}] }]
  }
}

これにより、以下のレイアウトが生成されます。

Grid Editor Layout Applied

削除されたコマンド

コマンドID 代替
workbench.action.showEditorsInFirstGroup 代わりに showEditorsInActiveGroup を使用してください
workbench.action.showEditorsInSecondGroup 代わりに showEditorsInActiveGroup を使用してください
workbench.action.showEditorsInThirdGroup 代わりに showEditorsInActiveGroup を使用してください
workbench.action.moveEditorToSecondGroup 代わりに workbench.action.moveEditor* コマンドを使用してください
workbench.action.moveEditorToThirdGroup 代わりに workbench.action.moveEditor* コマンドを使用してください
workbench.action.openLastEditorInGroup 代わりに `lastEditorInGroup` を使用してください
workbench.action.openFolderAsWorkspaceInNewWindow 代わりに duplicateWorkspaceInNewWindow を使用してください
editor.debug.action.toggleColumnBreakpoint 代わりに `toggleInlineBreakpoint` を使用してください

履歴ナビゲーションコマンド

コマンドID 代替
search.history.showPrevious 代わりに history.showPrevious を使用してください
search.history.showNext 代わりに `history.showNext` を使用してください
search.replaceHistory.showPrevious 代わりに history.showPrevious を使用してください
search.replaceHistory.showNext 代わりに `history.showNext` を使用してください
search.history.showPreviousIncludePattern 代わりに history.showPrevious を使用してください
search.history.showNextIncludePattern 代わりに `history.showNext` を使用してください
search.history.showPreviousExcludePattern 代わりに history.showPrevious を使用してください
search.history.showNextExcludePattern 代わりに `history.showNext` を使用してください
find.history.showPrevious 代わりに history.showPrevious を使用してください
find.history.showNext 代わりに `history.showNext` を使用してください
workbench.action.terminal.findWidget.history.showPrevious 代わりに history.showPrevious を使用してください
workbench.action.terminal.findWidget.history.showNext 代わりに `history.showNext` を使用してください
editor.action.extensioneditor.showPreviousFindTerm 代わりに history.showPrevious を使用してください
editor.action.extensioneditor.showNextFindTerm 代わりに `history.showNext` を使用してください
editor.action.webvieweditor.showPreviousFindTerm 代わりに history.showPrevious を使用してください
editor.action.webvieweditor.showNextFindTerm 代わりに `history.showNext` を使用してください
repl.action.historyPrevious 代わりに history.showPrevious を使用してください
repl.action.historyNext 代わりに `history.showNext` を使用してください

新しいドキュメント

新しいPython Flaskチュートリアル

新しいVisual Studio CodeでのFlaskの使用チュートリアルがあり、VS CodeでPython Flaskウェブアプリケーションを迅速に作成、編集、デバッグする方法を示しています。

更新されたウェブサイトデプロイメントチュートリアル

Azure Storageを使用して静的ウェブサイトを作成しデプロイするための静的ウェブサイトをAzureにデプロイするチュートリアルを更新しました。ウェブサイトのデプロイは、Azure Storage拡張機能が提供する新機能により簡素化されました。

注目すべき変更

  • 35361: macOS High Sierraでのネイティブウィンドウタブ機能の制限
  • 40158: マルチセッションの場合のブレークポイント検証UIの修正
  • 42726: ファイルを開く: 絶対パスが指定されている場合、名前にスペースを含むファイルを開けない
  • 49591: ツールバーのエディターアクションとして「すべて閉じる」ボタンを追加
  • 51200: Linuxのプロセスモニターが間違ったプロセス負荷を表示する
  • 51440: マウスの中ボタンで通知を閉じられるようにする

謝辞

最後に、そしてもちろん最も重要なこととして、Visual Studio Codeをさらに良くするために協力してくれた以下の方々に、心からの感謝を申し上げます!

vscodeへの貢献者

vscode-vsceへのコントリビューション

language-server-protocolへの貢献者

vscode-node-debugへの貢献

vscode-chrome-debug-coreへの貢献

vscode-chrome-debugへの貢献

  • Chance An (@changsi-an)
    • supportsLaunchUnelevatedProcessRequestフラグをテレメトリに追加。 PR #680
    • ホストがsupportsLaunchUnelevatedProcessRequestフラグを送信した場合、ホストを呼び出してChromeを非管理者権限で起動する。 PR #676
  • Michael Crane (@mrcrane)
    • すべての起動ケースでchrome PIDを設定 PR #687

localizationへの貢献

Transifex の VS Code プロジェクトチームには800人以上のメンバーがおり、毎月約100人のアクティブな貢献者がいます。新しい翻訳の提供、翻訳への投票、またはプロセス改善の提案など、皆様の貢献に感謝します。

このリリースに貢献してくださった方々のスナップショットを以下に示します。貢献者リストを含むプロジェクトの詳細については、プロジェクトサイトhttps://aka.ms/vscodelocをご覧ください。

  • フランス語: Antoine Griffard, Quentin BRETON。
  • イタリア語: Andrea Dottor, Emilie Rollandin, Aldo Donetti, Luigi Bruno, Piero Azi, Marco Dal Pino, Alessandro Alpi, Emanuele Ricci, Lorthirk, Riccardo Cappello。
  • ドイツ語: Ettore Atalan。
  • スペイン語: Alejandro Medina, Alberto Poblacion, José M. Aguilar。
  • 日本語: 田島 俊哉, 梶浦 諭, 百々瀬 治, yoshioms, 森 博之, 上田 祐貴, 矢野 直樹, 抜山 雄一。
  • 中国語(簡体字): Joel Yang, pluwen, Yurui Zhang, Simon Chan, YF, Vicey Wang。
  • 中国語(繁体字): Duran Hsieh, Winnie Lin, Alan Liu, Alan Tsai, Will 保哥, Han Lin。
  • 韓国語: Kyunghee Ko。
  • ロシア語: Ivan Kuzmenko。
  • ブルガリア語: Любомир Василев.
  • ハンガリー語: Tar Dániel, Dóczi Dominik。
  • ポルトガル語(ブラジル): Danilo Dantas, Otacilio Saraiva Maia Neto, Roger Figueiredo, Lucas Miranda, Rafael Oliveira, Yehoshua Oliveira, Bruno Sonnino, Roberto Fonseca。
  • トルコ語: Adem Coşkuner, Burak Karahan, Koray Sarıtaş。
  • オランダ語: RubenJacobse, Gerald Versluis, Maurits Kammer。
  • フィンランド語: Feetu Nyrhinen, Jussi Palo, Petri Niinimäki。
  • ギリシャ語: Nickolaos Platides, Theodore Tsirpanis, George M, Christos Koutsiaris。
  • インドネシア語: Wildan Mubarok, Laurensius Dede Suhardiman, Joseph Aditya P G, G-RiNe Project, Adiyat Mubarak。
  • ラトビア語: kozete。
  • ポーランド語: Patryk Brejdak, Iwona Kubowicz, Sebastian Baran, Lukasz Woznicki, Mateusz Przybyłowicz。
  • スウェーデン語: Eugen Cazacu。
  • ウクライナ語: Fedir Gordiienko, SergZ, Bogdan Surai。
  • ベトナム語: Vuong, Hung Nguyen, Thanh Phu, Brian Nguyen。
  • クロアチア語: Nikša Mihaica, Bruno Vego。
  • 英語(イギリス): Matthew John Cheetham。