/ / ZSH: wie kann man Widgets direkt zlen? - zsh

ZSH: Wie kann man Widgets direkt zlen? - zsh

Zsh

Die Dokumentation sagt in Abschnitt 18.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 (zum Beispiel sehen diese Q & A), mit denen Widgets an Schlüssel gebunden werden können bindkey KEY WIDGET. Dann kann man das Widget mit aufrufen KEY.

Ich wollte umschalten set-local-history und ich versuchte:

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

zle -h nicht funktionieren, aber ich habe gefunden eine Beschreibung der Argumente hier. Aber es scheint nicht, dass es so etwas gibt --call.

Was mache ich falsch? Wie ist es möglich, das Widget ohne Bindkey aufzurufen? Wie kann ich den aktuellen Status ausdrucken? (set-local-history schaltet den Zustand um)

Antworten:

7 für Antwort № 1

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

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

Lesen Sie den Namen eines Editor-Befehls und führen Sie ihn aus.

Dies eröffnet eine Minipuffer unterhalb der befehlszeile, 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 von abzufragen zle (einschließlich lokaler Geschichte), verwenden Sie die Variable $ZLE_STATE (nur innerhalb von Widget-Funktionen zugänglich):

ZLE_STATE (scalar)

Enthält eine Reihe von durch Leerzeichen getrennten Wörtern, die den aktuellen ZLE-Status beschreiben.

Gegenwärtig sind die gezeigten Zustände die EinfügungModus wie durch den Überschreibmodus oder vi-Replace-Widgets eingestellt und ob Verlauf Befehle rufen importierte Einträge auf, die vom Widget set-local-history gesteuert werden. Die Zeichenfolge enthält insert wenn Zeichen, die in die Befehlszeile eingefügt werden sollen, verschieben vorhandene Zeichen nach rechts oder overwrite wenn Charaktere sein sollen eingefügt vorhandene Zeichen überschreiben. Es beinhaltet localhistory wenn nur lokale Verlaufsbefehle besucht werden sollen oder globalhistory Wenn importiert, werden auch Verlaufsbefehle aufgerufen.

Die Teilzeichenfolgen werden in alphabetischer Reihenfolge sortiert, damit Sie zukunftssicher auf zwei bestimmte Teilzeichenfolgen testen können Auf diese Weise können Sie eine Übereinstimmung erzielen, indem Sie Folgendes tun:

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

Alle Zitate von man zshzle.


1 für Antwort № 2

Wenn Sie verwenden tmux Sie können 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 Fragen
Bemerkungen
Einen Kommentar hinzufügen