Wie bearbeite ich die Kommandozeile im Vollbildeditor in ZSH?

52

Wenn ich in der Bash im vi-Modus drücke Esc, vwird meine aktuelle Befehlszeile in dem von angegebenen Editor geöffnet $EDITORund ich kann sie im Vollbildmodus bearbeiten, bevor ich den Befehl 'speichere', um ihn an die Shell zurückzugeben und auszuführen.

Wie kann ich ein ähnliches Verhalten in zsh erreichen? Schlagen vim Befehlsmodus führt zu einer Glocke hat eine keine offensichtliche Wirkung, trotz der EDITORUmgebungsvariable eingestellt wird .

Murali Suriar
quelle

Antworten:

36

Sehen Sie edit-command-linein zshcontrib.

bindkey -M vicmd v edit-command-line
vergänglich
quelle
13
(Nur zur Verdeutlichung): Um das edit-command-line„Widget“ zu aktivieren, benötigen Sie etwas autoload edit-command-line; zle -N edit-command-linein einer Ihrer zsh init-Dateien (siehe Abschnitt ZLE-Funktionen in der zshcontribDokumentation ).
Chris Johnsen
Wie aktivierst du das, sobald es vorhanden ist? Der Bindkey in der Antwort im Emacs-Stil macht für mich Sinn. Aber ich kann keinen Hinweis darauf finden, was eingerichtet bindkey -M vicmd vist.
Mat Schaffer
@MatSchaffer Wie Bash: Wenn Sie sich im vi-Modus befinden, drücken Sie <ESC>, um vom Einfügemodus in den Befehlsmodus und anschließend vin den visuellen Modus zu wechseln ( Meta-vist identisch), oder nur, vwenn Sie sich bereits im Befehlsmodus befinden. Wenn Sie den Emacs-Modus verwenden, lautet die typische Bindung C-x C-e.
Ephemient
1
Wenn Sie die v-Taste neu zuordnen, können Sie den visuellen Modus nicht mehr verwenden. Ich bevorzuge daher die Neuzuordnung auf die Leertaste (die im normalen Modus nichts Sinnvolles bietet) mitbindkey -M vicmd ' ' edit-command-line
gib
37

Wenn Sie Emacs-Tastenkombinationen bevorzugen:

autoload -z edit-command-line
zle -N edit-command-line
bindkey "^X^E" edit-command-line
Daniel Serodio
quelle
9
Die ^x^eBindung scheint bei der aktuellen Version von .oh-my-zsh eine Standardeinstellung zu sein , was äußerst hilfreich ist.
Quodlibetor
^ x ^ e ist genau das, wonach ich gesucht habe.
Jmreicha
1
Ähnliches Setup für Prezto, solange das editorModul geladen ist.
AL der X
23

Mit können Sie fcden letzten Befehl im Verlauf bearbeiten. Es ist nicht dasselbe wie das Bearbeiten desselben Befehls, aber ein schneller Druck auf die Eingabetaste macht Ihren aktuellen Befehl zum letzten Befehl im Verlauf.

Christoph Wurm
quelle
14

Dies ist die vollständige Konfiguration, die ich zu meinem hinzugefügt habe ~/.zshrc, um das gleiche Verhalten von Bash zu erhalten:

export VISUAL=vim
autoload edit-command-line; zle -N edit-command-line
bindkey -M vicmd v edit-command-line
Matt Hughes
quelle
Laut den vorherigen Kommentaren ist dies standardmäßig konfiguriert, wenn Sie Oh my ZSH oder Prezto verwenden . Letzteres setzt editorvoraus, dass das Modul geladen und / vioder vimfür den Befehlsmodus ausgewählt ist.
AL der X
Ich würde dafür stimmen, dass dies die akzeptierte Antwort ist. Es löste meine Frage mit allen beschriebenen Konfigurationen. Vielen Dank.
Laurent