oh-my-zsh Verlaufserweiterung auf Leerzeichen oder Tabulator aber nicht eingeben

455
Matthew

In zsh mit oh-my-zsh können Sie einen Verlaufserweiterungsbefehl eingeben und entweder Leerzeichen, Tabulatortaste oder Eingabetaste drücken, und es wird erweitert. Zum Beispiel:

ls /path/to/some/directory cd !$<enter> 

würde zu erweitern

cd /path/to/some/directory 

Der Befehl wird jedoch nicht ausgeführt. Es bleibt an der Eingabeaufforderung zur weiteren Bearbeitung und Sie müssen ein zweites Mal die Eingabetaste drücken, um den Befehl auszuführen.

Ich habe gestern Abend arch linux installiert und festgestellt, dass die zsh-Einstellungen, die die Install-Shell enthält, eine Verlaufserweiterung für Tab und Space haben, aber wenn Sie die Eingabetaste drücken, wird der erweiterte Befehl sofort ausgeführt, ohne dass der Benutzer die Eingabetaste erneut drücken muss.

Das möchte ich, weil es mir einen Tastendruck erspart. Wenn Sie die Erweiterung bearbeiten möchten, drücken Sie die Tabulatortaste. Wenn ich den Befehl sofort ausführen möchte, könnte ich die Eingabetaste drücken.

Ich denke es hat etwas damit zu tun magic-spaceund ich sehe die folgende Zeile in.oh-my-zsh/lib/key-bindings.zsh

bindkey ' ' magic-space # [Space] - do history expansion 

Aber ich kann nicht finden, wo enterund bin tabauch an eine Erweiterung gebunden oder ob es eine Option gibt, um den Befehl sofort nach Eingabe auszuführen.

1

1 Antwort auf die Frage

1
Matthew

Das beschäftigt mich seit Jahren, seit ich mit zsh angefangen habe, aber ich habe endlich Zeit damit verbracht, weiter zu graben, bis ich es herausgefunden habe und es durch die HIST_VERIFYOption verursacht wurde . Die Option ist aktiviert .oh-my-zsh/lib/history.zshund muss überschrieben werden.

Hinzufügen der folgenden Zeile zur .zshrcBehebung des Verhaltens:

unsetopt HIST_VERIFY 

Von man zshoptions:

HIST_VERIFY

Führen Sie die Zeile nicht direkt aus, wenn der Benutzer eine Zeile mit Verlaufserweiterung eingibt. Führen Sie stattdessen die Historienerweiterung aus und laden Sie die Zeile erneut in den Bearbeitungspuffer.