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 .

Antworten:


36

Sehen Sie edit-command-linein zshcontrib.

bindkey -M vicmd v edit-command-line

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


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.


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.