Ich uzing zsh und da ich ein begeisterter Vim-Benutzer bin, habe ich gerade auf die Bearbeitung im Vim-Stil in der Befehlszeile umgestellt. (Das heißt , wenn ich geben ls foo/bar
und entscheiden , ich will cd
stattdessen kann ich schlagen Esc ^
an den Anfang zu hüpfen zurück und cw cd
Änderungen ls
zu cd
.
Das ist alles Dandy, aber das Problem ist, dass ich keine Ctrl+R
rekursive Verlaufssuche mehr durchführen kann . Gibt es eine andere Möglichkeit, oder kann ich die Vim-Tastenkombination irgendwie überschreiben, um sie zurückzubekommen?
garyjohn
zeigt eine Vim-Methode undJdeBP
zeigt, wie die Tastenkombination für Strg + R wiederhergestellt wird! Ich werde mit beiden Methoden spielen und später eine Antwort akzeptieren. Ich werde entscheiden, basierend auf 1) welche Methode mir einfacher erscheint und 2) welche mehr positive Stimmen bekommt. Danke euch beiden!Antworten:
Natürlich können Sie Ctrl+ nicht mehr verwenden R. Wenn Sie das Z Shell-Handbuch lesen, werden Sie feststellen, dass
history-incremental-search-backward
dieemacs
Keymap nur eine Tastenkombination für das Widget enthält. In den vi-Keymaps sind keine Tastenkombinationen dafür vorhanden.Wie Sie auch beim Lesen des Handbuchs (Kapitel 18) feststellen werden, ist das Hinzufügen einer Tastenkombination eine recht einfache Übung bei der Verwendung des
bindkey
Befehls:Sie müssen den
zle
Befehl nicht einmal verwenden , um das Widget einer Shell-Funktion zuzuordnen, da dies ein Standard-Widget ist.Wenn Sie die Antwort auf dieselbe Frage konsultieren, die sich im Z Shell-Wiki befindet , werden die Befehle zum spezifischen Hinzufügen dieser zu den vi-Tastenkombinationen "Befehl" und "Einfügemodus" angezeigt:
Beachten Sie auch, dass, wie Garyjohn betont, das /Zeichen in der vi "Befehl" -Schlüsselkarte an das
vi-history-search-backward
Widget gebunden ist . Der Unterschied zwischen diesem Widget und demhistory-incremental-search-backward
Widget besteht im Widget-Verhalten, das angewendet wird, sobald sich eines im Verlaufssuchmodus befindet. Hier sind einige der Unterschiede, die Sie feststellen werden:history-incremental-search-backward
zwischenmain
und undvicmd
Keymaps, wenn Sie dasvi-cmd-mode
Widget aufrufen, während Sie sich noch im Suchmodus befinden. dh vonemacs
Modus presssing die EscTaste oder Ctrl+ XCtrl+ VTasten schaltet den Suchmodus zwischen dememacs
undvicmd
keymaps. (Das Aufrufenhistory-incremental-search-backward
über dievicmd
Keymap ist daher mühsam, es sei denn, Sie binden auch etwas anvi-cmd-mode
dievicmd
Keymap.)vi-history-search-backward
behandelt dasvi-cmd-mode
Widget alsaccept-line
und beendet die Suche, wobei der Befehlsmodus, von dem aus Sie die Suche aufgerufen haben, erneut aufgerufen wird. dh (mit den Standardbindungen) wechselt /vom Befehlsmodus in den Suchmodus und Esckehrt in den Befehlsmodus zurück.history-incremental-search-backward
werden sowohl dashistory-incremental-search-backward
als auch dasvi-rev-repeat-search
Widget erkannt. dh (vorausgesetzt, Sie haben die Bindungen wie oben geändert) beide Ctrl+ Rund Nsuchen nach einer vorhergehenden übereinstimmenden Zeile.vi-history-search-backward
wird nur dasvi-rev-repeat-search
Widget erkannt. dh (vorausgesetzt, Sie haben die Bindungen wie oben geändert) Ctrl+ Rgibt einen Piepton aus und wird ignoriert.quelle
Im vi-Modus von bash
<Esc>/<string><Enter>
durchsucht die Eingabe den Befehlsverlauf nach<string>
.n
wird weiter zurück in der Geschichte suchen;N
wird vorwärts suchen. zshell kann das gleiche sein.quelle
Ich bevorzuge:
Auf diese Weise kann
ESC /text
ich die Befehlszeile eingeben und anzeigen. Wenn ich zum nächsten Match gehen möchte, tippe ichESC n
quelle