ZSH: Wie rufe ich ZLE-Widgets direkt auf?

ZSH: Wie rufe ich ZLE-Widgets direkt auf?

In der Dokumentation heißt es im Abschnitt18.4 Widgets, dass „die Aufgabe eines Widgets einfach darin besteht, eine kleine Aktion auszuführen“. Ich kann jedoch keine allgemeine Beschreibung finden, wie diese Aktionen aufgerufen werden, d. h. wie ein Widget aufgerufen wird.

Ich habe in Beispielen gesehen (siehe zum Beispieldiese Frage und Antwort), dass Widgets mit an Schlüssel gebunden werden können bindkey KEY WIDGET. Anschließend kann man das Widget mit aufrufen KEY.

Ich wollte umschalten set-local-historyund habe Folgendes versucht:

$ zle set-local-history 1
zle: widgets can only be called when ZLE is active

zle -hfunktioniert nicht, aber ich habe festgestellteine Beschreibung der Argumente hier. Aber so etwas scheint es nicht zu geben --call.

Was mache ich falsch? Wie kann ich das Widget ohne Bindkey aufrufen? Wie kann ich den aktuellen Status ausdrucken? ( set-local-historyschaltet den Status um)

Antwort1

Sie können das Widget über das Widget ausführen , das an (Emacs-Bindungen) oder (VI-Bindungen) execute-named-cmdgebunden ist :ESC-x:

execute-named-cmd (ESC-x) (:) (unbound)

Liest den Namen eines Editorbefehls und führt ihn aus.

Dies eröffnet eineMini-Pufferunterhalb der Kommandozeile, wo Sie zle-Widgets starten können. (Autovervollständigung ist verfügbar!):

$ [ESC-x]
execute: set-[TAB]
set-local-history  set-mark-command

Um den Status zle(einschließlich des lokalen Verlaufs) abzufragen, verwenden Sie die Variable $ZLE_STATE(nur innerhalb von Widget-Funktionen zugänglich):

ZLE_STATE (scalar)

Enthält eine Reihe durch Leerzeichen getrennter Wörter, die den aktuellen ZLE-Status beschreiben.

Derzeit werden die Zustände des Einfügemodus angezeigt, der von den Widgets „overwrite-mode“ oder „vi-replace“ festgelegt wird, und ob Verlaufsbefehle importierte Einträge besuchen, wie vom Widget „set-local-history“ gesteuert. Die Zeichenfolge enthält, insert ob in die Befehlszeile einzufügende Zeichen vorhandene Zeichen nach rechts verschieben oder overwriteob einzufügende Zeichen vorhandene Zeichen überschreiben.Es enthält die Angabe localhistory, ob nur lokale Verlaufsbefehle oder globalhistoryauch importierte Verlaufsbefehle aufgerufen werden.

Die Teilzeichenfolgen werden in alphabetischer Reihenfolge sortiert, sodass Sie, wenn Sie zukunftssicher auf zwei bestimmte Teilzeichenfolgen testen möchten, wie folgt einen Abgleich durchführen können:

if [[ $ZLE_STATE == *globalhistory*insert* ]]; then ...; fi

Alle Zitate aus man zshzle.

Antwort2

Wenn Sie verwenden, tmuxkönnen Sie den gebundenen Schlüssel mit aufrufen send-keys.

Beispiele:

# Current pane
$ tmux send-keys C-r

# Some targeted pane
$ tmux send-keys -t SESSION_NAME:WINDOW_NUMBER.PANE_NUMBER C-z

verwandte Informationen