ist jetzt verfügbar! Lesen Sie über die neuen Funktionen und Fehlerbehebungen vom November.

when clause Kontexte

Visual Studio Code setzt verschiedene Kontextschlüssel und spezifische Werte, abhängig davon, welche Elemente in der VS Code UI sichtbar und aktiv sind. Diese Kontexte können verwendet werden, um Erweiterungsbefehle und UI-Elemente, wie Menüs und Ansichten, selektiv zu aktivieren oder zu deaktivieren.

Zum Beispiel verwendet VS Code when clauses, um Tastenkombinationen für Befehle zu aktivieren oder zu deaktivieren, was Sie in der JSON-Datei für Standardtastenkombinationen sehen können (Einstellungen: Standardtastenkombinationen (JSON) öffnen).

{ "key": "f5",  "command": "workbench.action.debug.start",
                   "when": "debuggersAvailable && !inDebugMode" },

Oben hat der integrierte Befehl Debuggen starten die Tastenkombination F5, die nur aktiviert ist, wenn ein geeigneter Debugger verfügbar ist (Kontextschlüssel debuggersAvailable ist true) und der Editor sich nicht im Debug-Modus befindet (Kontextschlüssel inDebugMode ist false).

Bedingte Operatoren

Eine when clause kann aus einem Kontextschlüssel (z.B. inDebugMode) bestehen oder verschiedene Operatoren verwenden, um nuanciertere Editorzustände auszudrücken.

Logische Operatoren

Logische Operatoren ermöglichen die Kombination einfacher Kontextschlüssel oder when-clause-Ausdrücke, die andere logische Operatoren, Gleichheitsoperatoren, Vergleichsoperatoren, Match-Operatoren, in/not in Operatoren oder geklammerte Ausdrücke enthalten.

Operator Symbol Beispiel
Nicht ! "!editorReadonly" oder "!(editorReadonly || inDebugMode)"
Und && "textInputFocus && !editorReadonly"
Oder || "isLinux || isWindows"

Hinweis zur Priorität logischer Operatoren: Die obige Tabelle listet Operatoren in absteigender Reihenfolge der Priorität auf. Beispiele

Geschrieben als Interpretiert als
!foo && bar (!foo) && bar
!foo || bar (!foo) || bar
foo || bar && baz foo || (bar && baz)
!foo && bar || baz (!foo && bar) || baz
!(foo || bar) && baz (bleibt gleich) !(foo || bar) && baz

Gleichheitsoperatoren

Sie können die Gleichheit eines Kontextschlüsselwerts mit einem angegebenen Wert prüfen. Beachten Sie, dass die rechte Seite ein Wert ist und nicht als Kontextschlüssel interpretiert wird, d.h., sie wird nicht im Kontext nachgeschlagen.

Operator Symbol Beispiel
Gleichheit == "editorLangId == typescript" oder "editorLangId == 'typescript'"
Ungleichheit != "resourceExtname != .js" oder "resourceExtname != '.js'"

Hinweise

  • Wenn der Wert auf der rechten Seite ein String ist, der Leerzeichen enthält, muss er in einfache Anführungszeichen gesetzt werden - "resourceFilename == 'My New File.md'".
  • === hat das gleiche Verhalten wie == und !== hat das gleiche Verhalten wie !=

Vergleichsoperatoren

Sie können den Wert eines Kontextschlüssels mit einer Zahl vergleichen. Beachten Sie, dass die linke und die rechte Seite des Operators durch ein Leerzeichen getrennt sein müssen - foo < 1, aber nicht foo<1.

Operator Symbole Beispiel
Größer als >, >= "gitOpenRepositoryCount >= 1" aber nicht "gitOpenRepositoryCount>=1"
Kleiner als <, <= "workspaceFolderCount < 2" aber nicht "workspaceFolderCount<2"

Match-Operator

(früherer Name: Key-Value-Pair-Match-Operator)

Operator Symbol Beispiel
Übereinstimmung =~ "resourceScheme =~ /^untitled$|^file$/"

Es gibt einen Match-Operator (=~) für when clauses. Der Ausdruck key =~ regularExpressionLiteral behandelt die rechte Seite als regulären Ausdrucksliteral zum Abgleich mit der linken Seite. Um beispielsweise Kontextmenüeinträge für alle Docker-Dateien beizutragen, könnte man verwenden

   "when": "resourceFilename =~ /docker/"

Hinweise

  • Die rechte Seite des =~ Operators folgt den gleichen Regeln wie reguläre Ausdruckliterale (Referenz) in JavaScript, mit der Ausnahme, dass Zeichen sowohl den Escape-Regeln von JSON-Strings als auch regulären Ausdrücken folgen müssen. Zum Beispiel wäre ein regulärer Ausdrucksliteral zum Abgleich eines Substrings file:// /file:\/\// in JavaScript, aber /file:\\/\\// in einer when clause, da ein Backslash in einem JSON-String und ein Schrägstrich in einem regulären Ausdrucksmuster escaped werden muss.
  • Es gibt keinen Operator !=~, aber Sie können den Match-Ausdruck negieren - !(foo =~ /baz/).

Reguläre Ausdruck-Flags

Es ist möglich, Flags mit den regulären Ausdrucksliteralen zu verwenden. Zum Beispiel resourceFilename =~ /json/i oder myContextKey =~ /baz/si.

Unterstützte Flags: i, s, m, u.

Ignorierte Flags: g, y.

'in' und 'not in' bedingte Operatoren

Der in Operator für when clauses ermöglicht die dynamische Suche nach dem Wert eines Kontextschlüssels innerhalb des Werts eines anderen Kontextschlüssels. Wenn Sie beispielsweise einen Kontextmenübefehl zu Ordnern hinzufügen möchten, die einen bestimmten Dateityp enthalten (oder etwas, das nicht statisch bekannt ist), können Sie nun den in Operator verwenden, um dies zu erreichen. Sie können den not in Operator verwenden, um die entgegengesetzte Bedingung zu prüfen.

Operator Symbol Beispiel
In in "resourceFilename in supportedFolders"
Nicht in not in "resourceFilename not in supportedFolders"

Bestimmen Sie zuerst, welche Ordner den Befehl unterstützen sollen, und fügen Sie die Ordnernamen zu einem Array hinzu. Verwenden Sie dann den setContext Befehl, um das Array in einen Kontextschlüssel umzuwandeln.

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
});

Dann können Sie in der package.json eine Menübeitragung für das explorer/context Menü hinzufügen.

// Note, this assumes you have already defined a command called ext.doSpecial
"menus": {
  "explorer/context": [
    {
      "command": "ext.doSpecial",
      "when": "explorerResourceIsFolder && resourceFilename in ext.supportedFolders"
    }
  ]
}

In diesem Beispiel nehmen wir den Wert von resourceFilename (was in diesem Fall der Ordnername ist) und prüfen dessen Existenz im Wert von ext.supportedFolders. Wenn er existiert, wird das Menü angezeigt. Dieser leistungsstarke Operator sollte reichhaltigere bedingte und dynamische Beiträge ermöglichen, die when clauses unterstützen, z.B. Menüs, Ansichten usw.

Verfügbare Kontextschlüssel

Nachfolgend sind einige der verfügbaren Kontextschlüssel aufgeführt, die zu Boolean true/false ausgewertet werden.

Die Liste hier ist nicht vollständig und Sie können andere when clause Kontexte finden, indem Sie im Tastenkombinationen-Editor suchen und filtern (Einstellungen: Tastenkombinationen öffnen) oder die JSON-Datei für Standardtastenkombinationen überprüfen (Einstellungen: Standardtastenkombinationen (JSON) öffnen). Sie können auch Kontextschlüssel identifizieren, an denen Sie interessiert sind, mit dem Inspect Context Keys Utility.

Kontextname True wenn
Editor-Kontexte
editorFocus Ein Editor hat den Fokus, entweder Text oder ein Widget.
editorTextFocus Der Text in einem Editor hat den Fokus (Cursor blinkt).
textInputFocus Jeder Editor hat den Fokus (regulärer Editor, Debug REPL usw.).
inputFocus Jeder Texteingabebereich hat den Fokus (Editoren oder Textfelder).
editorTabMovesFocus Ob Tab den Fokus aus dem Editor verschiebt.
editorHasSelection Text ist im Editor ausgewählt.
editorHasMultipleSelections Mehrere Textbereiche sind ausgewählt (mehrere Cursor).
editorReadonly Der Editor ist schreibgeschützt.
editorLangId True, wenn die zugehörige Sprachkennung des Editors übereinstimmt.
Beispiel: "editorLangId == typescript".
isInDiffEditor Der aktive Editor ist ein Diff-Editor.
isInEmbeddedEditor True, wenn der Fokus sich innerhalb eines eingebetteten Editors befindet.
Betriebssystem-Kontexte
isLinux True, wenn das Betriebssystem Linux ist.
isMac True, wenn das Betriebssystem macOS ist.
isWindows True, wenn das Betriebssystem Windows ist.
isWeb True, wenn über das Web auf den Editor zugegriffen wird.
Listen-Kontexte
listFocus Eine Liste hat den Fokus.
listSupportsMultiselect Eine Liste unterstützt Mehrfachauswahl.
listHasSelectionOrFocus Eine Liste hat eine Auswahl oder den Fokus.
listDoubleSelection Eine Liste hat eine Auswahl von 2 Elementen.
listMultiSelection Eine Liste hat eine Auswahl von mehreren Elementen.
Modus-Kontexte
inSnippetMode Der Editor befindet sich im Snippet-Modus.
inQuickOpen Das Quick Open Dropdown hat den Fokus.
Ressourcen-Kontexte
resourceScheme True, wenn das Ressourcenschema der URI übereinstimmt.
Beispiel: "resourceScheme == file"
resourceFilename True, wenn der Dateiname im Explorer oder Editor übereinstimmt.
Beispiel: "resourceFilename == gulpfile.js"
resourceExtname True, wenn die Dateinamenerweiterung im Explorer oder Editor übereinstimmt.
Beispiel: "resourceExtname == .js"
resourceDirname True, wenn der absolute Ordnerpfad der Ressource im Explorer oder Editor übereinstimmt.
Beispiel: "resourceDirname == /users/alice/project/src"
resourcePath True, wenn der absolute Pfad der Ressource im Explorer oder Editor übereinstimmt.
Beispiel: "resourcePath == /users/alice/project/gulpfile.js"
resourceLangId True, wenn die Sprachkennung des Titels im Explorer oder Editor übereinstimmt (Sprachkennung).
Beispiel: "resourceLangId == markdown"
isFileSystemResource True, wenn die Datei im Explorer oder Editor eine Dateisystemressource ist, die von einem Dateisystemanbieter gehandhabt werden kann.
resourceSet True, wenn eine Datei im Explorer oder Editor gesetzt ist.
resource Die vollständige URI der Datei im Explorer oder Editor.
Explorer-Kontexte
explorerViewletVisible True, wenn die Explorer-Ansicht sichtbar ist.
explorerViewletFocus True, wenn die Explorer-Ansicht den Tastaturfokus hat.
filesExplorerFocus True, wenn der Datei-Explorer-Bereich den Tastaturfokus hat.
openEditorsFocus True, wenn der Abschnitt OFFENE EDITOREN den Tastaturfokus hat.
explorerResourceIsFolder True, wenn ein Ordner im Explorer ausgewählt ist.
Editor-Widget-Kontexte
findWidgetVisible Das Editor-Such-Widget ist sichtbar.
suggestWidgetVisible Das Vorschlags-Widget (IntelliSense) ist sichtbar.
suggestWidgetMultipleSuggestions Mehrere Vorschläge werden angezeigt.
renameInputVisible Das Umbenennungs-Eingabefeld ist sichtbar.
referenceSearchVisible Das Fenster "Referenzen suchen" ist geöffnet.
inReferenceSearchEditor Der Editor des Fensters "Referenzen suchen" hat den Fokus.
config.editor.stablePeek Peek-Editoren offen halten (gesteuert durch die Einstellung editor.stablePeek).
codeActionMenuVisible Das Menü "Code-Aktion" ist sichtbar.
parameterHintsVisible Parameter-Hinweise sind sichtbar (gesteuert durch die Einstellung editor.parameterHints.enabled).
parameterHintsMultipleSignatures Mehrere Parameter-Hinweise werden angezeigt.
Debugger-Kontexte
debuggersAvailable Eine geeignete Debugger-Erweiterung ist verfügbar.
inDebugMode Eine Debug-Sitzung läuft.
debugState Aktueller Debugger-Status.
Mögliche Werte sind inactive, initializing, stopped, running.
debugType True, wenn der Debug-Typ übereinstimmt.
Beispiel: "debugType == 'node'".
inDebugRepl Fokus liegt in der Debug-Konsole REPL.
Integrierte Terminal-Kontexte
terminalFocus Ein integriertes Terminal hat den Fokus.
terminalIsOpen Ein integriertes Terminal ist geöffnet.
Timeline-Ansicht-Kontexte
timelineFollowActiveEditor True, wenn die Timeline-Ansicht dem aktiven Editor folgt.
Timeline-Ansicht-Element-Kontexte
timelineItem True, wenn der Kontextwert des Timeline-Elements übereinstimmt.
Beispiel: "timelineItem =~ /git:file:commit\\b/".
Erweiterungs-Kontexte
extension True, wenn die ID der Erweiterung übereinstimmt.
Beispiel: "extension == eamodio.gitlens".
extensionStatus True, wenn die Erweiterung installiert ist.
Beispiel: "extensionStatus == installed".
extensionHasConfiguration True, wenn die Erweiterung eine Konfiguration hat.
Globale UI-Kontexte
notificationFocus Benachrichtigung hat den Tastaturfokus.
notificationCenterVisible Das Benachrichtigungszentrum ist unten rechts in VS Code sichtbar.
notificationToastsVisible Toast-Benachrichtigungen sind unten rechts in VS Code sichtbar.
searchViewletVisible Die Suchansicht ist geöffnet.
sideBarVisible Die Seitenleiste ist angezeigt.
sideBarFocus Die Seitenleiste hat den Fokus.
panelFocus Das Panel hat den Fokus.
inZenMode Das Fenster befindet sich im Zen-Modus.
isCenteredLayout Der Editor befindet sich im zentrierten Layout-Modus.
workbenchState Kann empty, folder (1 Ordner) oder workspace sein.
workspaceFolderCount Anzahl der Arbeitsbereichsordner.
replaceActive Das Ersetzen-Textfeld der Suchansicht ist geöffnet.
view Für view/title und view/item/context, die Ansicht, in der der Befehl angezeigt wird.
Beispiel: "view == myViewsExplorerID".
viewItem Für view/item/context, der contextValue des Baum-Elements.
Beispiel: "viewItem == someContextValue".
webviewId Für webview/context, die Webview-ID, in der der Befehl angezeigt wird.
Beispiel: "webviewId == catCoding".
isFullscreen True, wenn das Fenster im Vollbildmodus ist.
focusedView Die Kennung der aktuell fokussierten Ansicht.
canNavigateBack True, wenn die Navigation zurück möglich ist.
canNavigateForward True, wenn die Navigation vorwärts möglich ist.
canNavigateToLastEditLocation True, wenn die Navigation zur letzten Bearbeitungsposition möglich ist.
Globale Editor-UI-Kontexte
textCompareEditorVisible Mindestens ein Diff- (Vergleichs-) Editor ist sichtbar.
textCompareEditorActive Ein Diff- (Vergleichs-) Editor ist aktiv.
editorIsOpen True, wenn ein Editor geöffnet ist.
groupEditorsCount Anzahl der Editoren in einer Gruppe.
activeEditorGroupEmpty True, wenn die aktive Editorgruppe keine Editoren enthält.
activeEditorGroupIndex Eine Zahl beginnend mit 1, die die Position einer Editorgruppe im Editorraster widerspiegelt.
Die Gruppe mit dem Index 1 ist die erste in der oberen linken Ecke.
activeEditorGroupLast Ist true für die letzte Editorgruppe im Editorraster.
multipleEditorGroups True, wenn mehrere Editorgruppen vorhanden sind.
activeEditor Die Kennung des aktiven Editors in einer Gruppe.
activeEditorIsDirty True, wenn der aktive Editor in einer Gruppe beschmutzt (dirty) ist.
activeEditorIsNotPreview True, wenn der aktive Editor in einer Gruppe nicht im Vorschau-Modus ist.
activeEditorIsPinned True, wenn der aktive Editor in einer Gruppe angeheftet ist.
inSearchEditor True, wenn der Fokus sich innerhalb eines Sucheditors befindet.
activeWebviewPanelId Die ID des aktuell aktiven Webview-Panels.
activeCustomEditorId Die ID des aktuell aktiven Benutzerdefinierten Editors.
Konfigurations-Einstellungen-Kontexte
config.editor.minimap.enabled True, wenn die Einstellung editor.minimap.enabled auf true gesetzt ist.

Hinweis: Sie können jede Benutzer- oder Arbeitsbereichseinstellung, die zu einem booleschen Wert ausgewertet wird, hier mit dem Präfix "config." verwenden.

Sichtbare/Fokussierte Ansicht bei when clause Kontext

Sie können eine when clause haben, die prüft, ob eine bestimmte Ansicht sichtbar oder fokussiert ist.

Kontextname True wenn
view.${viewId}.visible True, wenn eine bestimmte Ansicht sichtbar ist.
Beispiel: "view.workbench.explorer.fileView.visible"
focusedView True, wenn eine bestimmte Ansicht fokussiert ist.
Beispiel: "focusedView == 'workbench.explorer.fileView'"

Ansicht-Identifikatoren

  • workbench.explorer.fileView - Datei-Explorer
  • workbench.explorer.openEditorsView - Geöffnete Editoren
  • outline - Gliederungsansicht
  • timeline - Timeline-Ansicht
  • workbench.scm - Quellcodeverwaltung
  • workbench.scm.repositories - Quellcodeverwaltung Repositories
  • workbench.debug.variablesView - Variablen
  • workbench.debug.watchExpressionsView - Überwachung
  • workbench.debug.callStackView - Aufrufstapel
  • workbench.debug.loadedScriptsView - Geladene Skripte
  • workbench.debug.breakPointsView - Haltepunkte
  • workbench.debug.disassemblyView - Disassemblierung
  • workbench.views.extensions.installed - Installierte Erweiterungen
  • extensions.recommendedList - Empfohlene Erweiterungen
  • workbench.panel.markers.view - Probleme
  • workbench.panel.output - Ausgabe
  • workbench.panel.repl.view - Debug-Konsole
  • terminal - Integriertes Terminal
  • workbench.panel.comments - Kommentare

Sichtbare Ansichtscontainer bei when clause Kontext

Sie können eine when clause haben, die prüft, ob ein bestimmter Ansichtscontainer sichtbar ist.

Kontextname True wenn
activeViewlet True, wenn der Ansichtscontainer in der Seitenleiste sichtbar ist.
Beispiel: "activeViewlet == 'workbench.view.explorer'"
activePanel True, wenn der Ansichtscontainer im Panel sichtbar ist.
Beispiel: "activePanel == 'workbench.panel.output'"
activeAuxiliary True, wenn der Ansichtscontainer in der sekundären Seitenleiste sichtbar ist.
Beispiel: "activeAuxiliary == 'workbench.view.debug'"

Ansichtscontainer-Identifikatoren

  • workbench.view.explorer - Datei-Explorer
  • workbench.view.search - Suche
  • workbench.view.scm - Quellcodeverwaltung
  • workbench.view.debug - Ausführen
  • workbench.view.extensions - Erweiterungen
  • workbench.panel.markers - Probleme
  • workbench.panel.output - Ausgabe
  • workbench.panel.repl - Debug-Konsole
  • terminal - Integriertes Terminal
  • workbench.panel.comments - Kommentare

Wenn Sie eine when clause wünschen, die nur aktiviert ist, wenn ein bestimmter Ansichtscontainer den Fokus hat, verwenden Sie sideBarFocus oder panelFocus oder auxiliaryBarFocus in Kombination mit den Kontextschlüsseln activeViewlet oder activePanel oder activeAuxiliary.

Zum Beispiel ist die folgende when clause nur dann wahr, wenn der Datei-Explorer den Fokus hat.

"sideBarFocus && activeViewlet == 'workbench.view.explorer'"

Eine Einstellung in einer when clause prüfen

In einer when clause können Sie auf einen Konfigurationswert (Einstellung) verweisen, indem Sie ihm das Präfix config. voranstellen, z.B. config.editor.tabCompletion oder config.breadcrumbs.enabled.

Einen benutzerdefinierten when clause Kontext hinzufügen

Wenn Sie Ihre eigene VS Code-Erweiterung erstellen und Befehle, Menüs oder Ansichten mithilfe eines when clause Kontexts aktivieren/deaktivieren müssen und keine der vorhandenen Schlüssel Ihren Anforderungen entspricht, können Sie Ihren eigenen Kontextschlüssel mit dem setContext Befehl hinzufügen.

Das erste Beispiel unten setzt den Schlüssel myExtension.showMyCommand auf true, den Sie bei der Aktivierung von Befehlen oder mit der when Eigenschaft verwenden können. Das zweite Beispiel speichert einen Wert, den Sie mit einer when clause verwenden könnten, um zu prüfen, ob die Anzahl der coolen offenen Dinge größer als 2 ist.

vscode.commands.executeCommand('setContext', 'myExtension.showMyCommand', true);

vscode.commands.executeCommand('setContext', 'myExtension.numberOfCoolOpenThings', 4);

Inspect Context Keys Utility

Wenn Sie alle aktuell aktiven Kontextschlüssel zur Laufzeit sehen möchten, können Sie den Befehl Entwickler: Kontextschlüssel inspizieren aus der Befehlspalette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) verwenden. Kontextschlüssel inspizieren zeigt Kontextschlüssel und ihre Werte in der **Konsole** der VS Code Developer Tools an (Hilfe > Entwicklertools umschalten).

Wenn Sie Entwickler: Kontextschlüssel inspizieren ausführen, hebt Ihr Cursor Elemente in der VS Code UI hervor, und wenn Sie auf ein Element klicken, werden die aktuellen Kontextschlüssel und ihre Zustände als Objekt in der Konsole ausgegeben.

Inspect Context Keys output

Die Liste der aktiven Kontextschlüssel ist umfangreich und kann benutzerdefinierte Kontextschlüssel von installierten Erweiterungen enthalten.

Hinweis: Einige Kontextschlüssel sind für die interne Verwendung von VS Code bestimmt und können sich in Zukunft ändern.

© . This site is unofficial and not affiliated with Microsoft.