when 句のコンテキスト
Visual Studio Code は、VS Code UI で表示およびアクティブになっている要素に応じて、さまざまなコンテキストキーと特定の値を設定します。これらのコンテキストを使用して、メニューやビューなどの拡張機能コマンドと UI 要素を選択的に有効または無効にすることができます。
たとえば、VS Code は when 句を使用してコマンドキーバインドを有効または無効にします。これは、既定のキーバインド JSON ([基本設定: 既定のキーボードショートカットを開く (JSON)]) で確認できます。
{ "key": "f5", "command": "workbench.action.debug.start",
"when": "debuggersAvailable && !inDebugMode" },
上記では、組み込みの [デバッグの開始] コマンドにキーボードショートカット F5 が割り当てられており、これは適切なデバッガーが利用可能な場合 (コンテキストキー debuggersAvailable
が true) で、エディターがデバッグモードではない場合 (コンテキストキー inDebugMode
が false) のみ有効になります。
条件演算子
when 句は、コンテキストキー (たとえば、inDebugMode
) で構成することも、さまざまな演算子を使用して、より微妙なエディターの状態を表現することもできます。
論理演算子
論理演算子を使用すると、単純なコンテキストキー、または他の論理演算子、等価演算子、比較演算子、一致演算子、in
/not in
演算子、または括弧で囲まれた式を含む when 句式を組み合わせることができます。
演算子 | 記号 | 例 |
---|---|---|
否定 | ! |
"!editorReadonly" または "!(editorReadonly || inDebugMode)" |
論理積 | && |
"textInputFocus && !editorReadonly" |
論理和 | || |
"isLinux || isWindows" |
論理演算子の優先順位に関する注記: 上の表は、演算子を優先順位の高い順にリストしています。例
記述 | 解釈 |
---|---|
!foo && bar |
(!foo) && bar |
!foo || bar |
(!foo) || bar |
foo || bar && baz |
foo || (bar && baz) |
!foo && bar || baz |
(!foo && bar) || baz |
!(foo || bar) && baz |
(同じ) !(foo || bar) && baz |
等価演算子
コンテキストキーの値が指定された値と等しいかどうかを確認できます。右辺は値であり、コンテキストキーとして解釈されないことに注意してください。つまり、コンテキスト内で検索されません。
演算子 | 記号 | 例 |
---|---|---|
等しい | == |
"editorLangId == typescript" または "editorLangId == 'typescript'" |
等しくない | != |
"resourceExtname != .js" または "resourceExtname != '.js'" |
注
- 右辺の値が空白文字を含む文字列の場合、一重引用符で囲む必要があります -
"resourceFilename == 'My New File.md'"
。 ===
は==
と同じ動作をし、!==
は!=
と同じ動作をします。
比較演算子
コンテキストキーの値と数値を比較できます。演算子の左辺と右辺は空白文字で区切る必要があります - foo < 1
(foo<1
は不可)。
演算子 | 記号 | 例 |
---|---|---|
より大きい | > , >= |
"gitOpenRepositoryCount >= 1" ("gitOpenRepositoryCount>=1" は不可) |
より小さい | < , <= |
"workspaceFolderCount < 2" ("workspaceFolderCount<2" は不可) |
一致演算子
(旧名: キーと値のペア一致演算子)
演算子 | 記号 | 例 |
---|---|---|
一致 | =~ |
"resourceScheme =~ /^untitled$|^file$/" |
when 句には一致演算子 (=~
) があります。式 key =~ regularExpressionLiteral
は、右辺を左辺と照合する正規表現リテラルとして扱います。たとえば、すべての Docker ファイルのコンテキストメニュー項目を提供するには、次のように使用できます。
"when": "resourceFilename =~ /docker/"
注
=~
演算子の右辺は、JavaScript の正規表現リテラル (リファレンス) と同じルールに従いますが、文字は JSON 文字列と正規表現の両方のエスケープルールに従う必要があります。たとえば、サブ文字列file://
に一致する正規表現リテラルは、JavaScript では/file:\/\//
ですが、when 句では/file:\\/\\//
になります。これは、JSON 文字列ではバックスラッシュをエスケープする必要があり、正規表現パターンではスラッシュをエスケープする必要があるためです。!=~
演算子は存在しませんが、一致式を否定することはできます -!(foo =~ /baz/)
。
正規表現フラグ
正規表現リテラルでフラグを使用できます。たとえば、resourceFilename =~ /json/i
や myContextKey =~ /baz/si
などです。
サポートされているフラグ: i
、s
、m
、u
。
無視されるフラグ: g
、y
。
'in' および 'not in' 条件演算子
when 句の in
演算子を使用すると、別のコンテキストキーの値内でコンテキストキーの値を動的に検索できます。たとえば、特定の種類のファイルを含むフォルダー (または静的に認識できないもの) にコンテキストメニューコマンドを追加する場合、in
演算子を使用して実現できます。not in
演算子を使用して、反対の条件を確認できます。
演算子 | 記号 | 例 |
---|---|---|
包含 | in |
"resourceFilename in supportedFolders" |
非包含 | not in |
"resourceFilename not in supportedFolders" |
まず、コマンドをサポートするフォルダーを決定し、フォルダー名を配列に追加します。次に、setContext
コマンドを使用して、配列をコンテキストキーに変換します。
vscode.commands.executeCommand('setContext', 'ext.supportedFolders', [
'test',
'foo',
'bar'
]);
// or
// Note in this case (using an object), the value doesn't matter, it is based on the existence of the key in the object
// The value must be of a simple type
vscode.commands.executeCommand('setContext', 'ext.supportedFolders', {
test: true,
foo: 'anything',
bar: false
});
次に、package.json
で、explorer/context
メニューのメニューコントリビューションを追加できます。
// Note, this assumes you have already defined a command called ext.doSpecial
"menus": {
"explorer/context": [
{
"command": "ext.doSpecial",
"when": "explorerResourceIsFolder && resourceFilename in ext.supportedFolders"
}
]
}
その例では、resourceFilename
の値 (この場合はフォルダーの名前) を取得し、ext.supportedFolders
の値に存在するかどうかを確認しています。存在する場合、メニューが表示されます。この強力な演算子により、メニュー、ビューなど、when
句をサポートする、より豊富な条件付きおよび動的なコントリビューションが可能になるはずです。
利用可能なコンテキストキー
以下は、Boolean の true/false に評価される、利用可能なコンテキストキーの一部です。
ここに示すリストはすべてを網羅しているわけではありません。他の when 句コンテキストは、キーボードショートカットエディター ([基本設定: キーボードショートカットを開く]) で検索およびフィルタリングするか、既定のキーバインド JSON ファイル ([基本設定: 既定のキーボードショートカットを開く (JSON)]) を確認することで見つけることができます。また、コンテキストキーの検査ユーティリティを使用して、関心のあるコンテキストキーを特定することもできます。
コンテキスト名 | true になる場合 |
---|---|
エディターのコンテキスト | |
editorFocus |
エディター (テキストまたはウィジェット) がフォーカスされている場合。 |
editorTextFocus |
エディター内のテキストがフォーカスされている場合 (カーソルが点滅している場合)。 |
textInputFocus |
任意のエディター (通常のエディター、デバッグ REPL など) がフォーカスされている場合。 |
inputFocus |
任意のテキスト入力領域 (エディターまたはテキストボックス) がフォーカスされている場合。 |
editorTabMovesFocus |
Tab キーでエディターからフォーカスが移動するかどうか。 |
editorHasSelection |
エディターでテキストが選択されている場合。 |
editorHasMultipleSelections |
テキストの複数の領域が選択されている場合 (複数のカーソル)。 |
editorReadonly |
エディターが読み取り専用の場合。 |
editorLangId |
エディターに関連付けられている 言語 ID が一致する場合に true。 例: "editorLangId == typescript" 。 |
isInDiffEditor |
アクティブなエディターが差分エディターの場合。 |
isInEmbeddedEditor |
フォーカスが埋め込みエディター内にある場合に true。 |
オペレーティングシステムのコンテキスト | |
isLinux |
OS が Linux の場合に true。 |
isMac |
OS が macOS の場合に true。 |
isWindows |
OS が Windows の場合に true。 |
isWeb |
Web からエディターにアクセスしている場合に true。 |
リストコンテキスト | |
listFocus |
リストがフォーカスされている場合。 |
listSupportsMultiselect |
リストが複数選択をサポートしている場合。 |
listHasSelectionOrFocus |
リストが選択またはフォーカスされている場合。 |
listDoubleSelection |
リストで 2 つの要素が選択されている場合。 |
listMultiSelection |
リストで複数の要素が選択されている場合。 |
モードコンテキスト | |
inSnippetMode |
エディターがスニペットモードの場合。 |
inQuickOpen |
クイックオープン ドロップダウンがフォーカスされている場合。 |
リソースコンテキスト | |
resourceScheme |
リソース URI スキームが一致する場合に true。 例: "resourceScheme == file" |
resourceFilename |
エクスプローラーまたはエディターのファイル名が一致する場合に true。 例: "resourceFilename == gulpfile.js" |
resourceExtname |
エクスプローラーまたはエディターのファイル名拡張子が一致する場合に true。 例: "resourceExtname == .js" |
resourceDirname |
エクスプローラーまたはエディターのリソース絶対フォルダーパスが一致する場合に true。 例: "resourceDirname == /users/alice/project/src" |
resourcePath |
エクスプローラーまたはエディターのリソース絶対パスが一致する場合に true。 例: "resourcePath == /users/alice/project/gulpfile.js" |
resourceLangId |
エクスプローラーまたはエディターのタイトル 言語 ID が一致する場合に true。 例: "resourceLangId == markdown" |
isFileSystemResource |
エクスプローラーまたはエディターファイルが、ファイルシステムプロバイダーから処理できるファイルシステムリソースである場合に true。 |
resourceSet |
エクスプローラーまたはエディターファイルが設定されている場合に true。 |
resource |
エクスプローラーまたはエディターファイルの完全な URI。 |
エクスプローラーのコンテキスト | |
explorerViewletVisible |
エクスプローラービューが表示されている場合に true。 |
explorerViewletFocus |
エクスプローラービューにキーボードフォーカスがある場合に true。 |
filesExplorerFocus |
ファイルエクスプローラーセクションにキーボードフォーカスがある場合に true。 |
openEditorsFocus |
[開いているエディター] セクションにキーボードフォーカスがある場合に true。 |
explorerResourceIsFolder |
エクスプローラーでフォルダーが選択されている場合に true。 |
エディターウィジェットのコンテキスト | |
findWidgetVisible |
エディター検索ウィジェットが表示されている場合。 |
suggestWidgetVisible |
サジェストウィジェット (IntelliSense) が表示されている場合。 |
suggestWidgetMultipleSuggestions |
複数のサジェストが表示されている場合。 |
renameInputVisible |
[名前の変更] 入力テキストボックスが表示されている場合。 |
referenceSearchVisible |
[参照のピーク] ピークウィンドウが開いている場合。 |
inReferenceSearchEditor |
[参照のピーク] ピークウィンドウエディターがフォーカスされている場合。 |
config.editor.stablePeek |
ピークエディターを開いたままにする ([editor.stablePeek ] 設定で制御)。 |
codeActionMenuVisible |
コードアクションメニューが表示されている場合。 |
parameterHintsVisible |
パラメーターヒントが表示されている場合 ([editor.parameterHints.enabled ] 設定で制御)。 |
parameterHintsMultipleSignatures |
複数のパラメーターヒントが表示されている場合。 |
デバッガーのコンテキスト | |
debuggersAvailable |
適切なデバッガー拡張機能が利用可能な場合。 |
inDebugMode |
デバッグセッションが実行中の場合。 |
debugState |
アクティブなデバッガーの状態。 使用可能な値は、 inactive 、initializing 、stopped 、running です。 |
debugType |
デバッグタイプが一致する場合に true。 例: "debugType == 'node'" 。 |
inDebugRepl |
フォーカスが [デバッグコンソール] REPL にある場合。 |
統合ターミナルのコンテキスト | |
terminalFocus |
統合ターミナルがフォーカスされている場合。 |
terminalIsOpen |
統合ターミナルが開いている場合。 |
タイムラインビューのコンテキスト | |
timelineFollowActiveEditor |
タイムラインビューがアクティブなエディターを追跡している場合に true。 |
タイムラインビューアイテムのコンテキスト | |
timelineItem |
タイムラインアイテムのコンテキスト値が一致する場合に true。 例: "timelineItem =~ /git:file:commit\\b/" 。 |
拡張機能のコンテキスト | |
extension |
拡張機能の ID が一致する場合に true。 例: "extension == eamodio.gitlens" 。 |
extensionStatus |
拡張機能がインストールされている場合に true。 例: "extensionStatus == installed" 。 |
extensionHasConfiguration |
拡張機能に構成がある場合に true。 |
グローバル UI コンテキスト | |
notificationFocus |
通知にキーボードフォーカスがある場合。 |
notificationCenterVisible |
通知センターが VS Code の右下に表示されている場合。 |
notificationToastsVisible |
通知トーストが VS Code の右下に表示されている場合。 |
searchViewletVisible |
検索ビューが開いている場合。 |
sideBarVisible |
サイドバーが表示されている場合。 |
sideBarFocus |
サイドバーがフォーカスされている場合。 |
panelFocus |
パネルがフォーカスされている場合。 |
inZenMode |
ウィンドウが Zen モードの場合。 |
isCenteredLayout |
エディターが中央レイアウトモードの場合。 |
workbenchState |
empty 、folder (1 つのフォルダー)、または workspace になる可能性があります。 |
workspaceFolderCount |
ワークスペースフォルダーの数。 |
replaceActive |
検索ビューの [置換] テキストボックスが開いている場合。 |
view |
view/title および view/item/context の場合、コマンドを表示するビュー。例: "view == myViewsExplorerID" 。 |
viewItem |
view/item/context の場合、ツリーアイテムからの contextValue 。例: "viewItem == someContextValue" 。 |
webviewId |
webview/context の場合、コマンドを表示する webview ID。例: "webviewId == catCoding" 。 |
isFullscreen |
ウィンドウがフルスクリーンの場合に true。 |
focusedView |
現在フォーカスされているビューの識別子。 |
canNavigateBack |
戻るナビゲーションが可能な場合に true。 |
canNavigateForward |
進むナビゲーションが可能な場合に true。 |
canNavigateToLastEditLocation |
最後の編集場所に移動できる場合に true。 |
グローバルエディター UI コンテキスト | |
textCompareEditorVisible |
少なくとも 1 つの差分 (比較) エディターが表示されている場合。 |
textCompareEditorActive |
差分 (比較) エディターがアクティブな場合。 |
editorIsOpen |
1 つのエディターが開いている場合に true。 |
groupEditorsCount |
グループ内のエディターの数。 |
activeEditorGroupEmpty |
アクティブなエディターグループにエディターがない場合に true。 |
activeEditorGroupIndex |
エディターグリッド内のエディターグループの位置を反映する 1 から始まる数値。インデックス 1 のグループは、左上の最初のグループになります。 |
activeEditorGroupLast |
エディターグリッドの最後のエディターグループの場合は true になります。 |
multipleEditorGroups |
複数のエディターグループが存在する場合に true。 |
activeEditor |
グループ内のアクティブなエディターの識別子。 |
activeEditorIsDirty |
グループ内のアクティブなエディターがダーティの場合に true。 |
activeEditorIsNotPreview |
グループ内のアクティブなエディターがプレビューモードではない場合に true。 |
activeEditorIsPinned |
グループ内のアクティブなエディターがピン留めされている場合に true。 |
inSearchEditor |
フォーカスが検索エディター内にある場合に true。 |
activeWebviewPanelId |
現在アクティブな webview パネルの ID。 |
activeCustomEditorId |
現在アクティブな カスタムエディターの ID。 |
構成設定コンテキスト | |
config.editor.minimap.enabled |
設定 editor.minimap.enabled が true の場合に true。 |
注: ここでは、
"config."
というプレフィックスを付けて、ブール値に評価されるユーザーまたはワークスペース設定を使用できます。
表示/フォーカスされたビューの when 句コンテキスト
特定の ビューが表示されているか、またはフォーカスされているかを確認する when 句を設定できます。
コンテキスト名 | true になる場合 |
---|---|
view.${viewId}.visible |
特定のビューが表示されている場合に true。 例: "view.workbench.explorer.fileView.visible" |
focusedView |
特定のビューがフォーカスされている場合に true。 例: "focusedView == 'workbench.explorer.fileView'" |
ビューの識別子
workbench.explorer.fileView
- ファイルエクスプローラーworkbench.explorer.openEditorsView
- 開いているエディターoutline
- アウトラインビューtimeline
- タイムラインビューworkbench.scm
- ソース管理workbench.scm.repositories
- ソース管理リポジトリworkbench.debug.variablesView
- 変数workbench.debug.watchExpressionsView
- ウォッチworkbench.debug.callStackView
- コールスタックworkbench.debug.loadedScriptsView
- ロードされたスクリプトworkbench.debug.breakPointsView
- ブレークポイントworkbench.debug.disassemblyView
- 逆アセンブルworkbench.views.extensions.installed
- インストール済み拡張機能extensions.recommendedList
- おすすめの拡張機能workbench.panel.markers.view
- [問題]workbench.panel.output
- 出力workbench.panel.repl.view
- デバッグコンソールterminal
- 統合ターミナルworkbench.panel.comments
- コメント
表示されているビューコンテナの when 句コンテキスト
特定の ビューコンテナが表示されているかどうかを確認する when 句を設定できます。
コンテキスト名 | true になる場合 |
---|---|
activeViewlet |
ビューコンテナがサイドバーに表示されている場合に true。 例: "activeViewlet == 'workbench.view.explorer'" |
activePanel |
ビューコンテナがパネルに表示されている場合に true。 例: "activePanel == 'workbench.panel.output'" |
activeAuxiliary |
ビューコンテナがセカンダリサイドバーに表示されている場合に true。 例: "activeAuxiliary == 'workbench.view.debug'" |
ビューコンテナの識別子
workbench.view.explorer
- ファイルエクスプローラーworkbench.view.search
- 検索workbench.view.scm
- ソース管理workbench.view.debug
- 実行とデバッグworkbench.view.extensions
- 拡張機能workbench.panel.markers
- 問題workbench.panel.output
- 出力workbench.panel.repl
- デバッグコンソールterminal
- 統合ターミナルworkbench.panel.comments
- コメント
特定のビューコンテナがフォーカスされている場合にのみ有効になる when 句が必要な場合は、sideBarFocus
または panelFocus
または auxiliaryBarFocus
を activeViewlet
または activePanel
または activeAuxiliary
コンテキストキーと組み合わせて使用します。
たとえば、次の when 句は、ファイルエクスプローラーがフォーカスされている場合にのみ true になります。
"sideBarFocus && activeViewlet == 'workbench.view.explorer'"
when 句で設定を確認する
when 句では、config.editor.tabCompletion
や config.breadcrumbs.enabled
など、構成 (設定) 値を参照するには、先頭に config.
を付けます。
カスタム when 句コンテキストを追加する
独自の VS Code 拡張機能をオーサリングしていて、when 句コンテキストを使用してコマンド、メニュー、またはビューを有効/無効にする必要があり、既存のキーがニーズに合わない場合は、setContext
コマンドを使用して独自のコンテキストキーを追加できます。
以下の最初の例では、キー myExtension.showMyCommand
を true に設定します。これは、コマンドの有効化または when
プロパティで使用できます。2 番目の例では、開いているクールなものの数が 2 より大きいかどうかを確認するために when 句で使用できる値を格納します。
vscode.commands.executeCommand('setContext', 'myExtension.showMyCommand', true);
vscode.commands.executeCommand('setContext', 'myExtension.numberOfCoolOpenThings', 4);
コンテキストキーの検査ユーティリティ
実行時に現在アクティブなすべてのコンテキストキーを確認する場合は、コマンドパレットから [開発者: コンテキストキーの検査] コマンド (⇧⌘P (Windows、Linux Ctrl+Shift+P)) を使用できます。[コンテキストキーの検査] を実行すると、コンテキストキーとその値が VS Code 開発者ツールの [コンソール] タブ ([ヘルプ] > [開発者ツールの切り替え]) に表示されます。
[開発者: コンテキストキーの検査] を実行すると、カーソルが VS Code UI の要素を強調表示し、要素をクリックすると、現在のコンテキストキーとその状態がオブジェクトとしてコンソールに出力されます。
アクティブなコンテキストキーのリストは広範囲にわたっており、インストールした拡張機能からのカスタムコンテキストキーが含まれている場合があります。
注: 一部のコンテキストキーは VS Code 内部で使用するためのものであり、将来変更される可能性があります。