Natürlich können Sie Ctrl+ nicht mehr verwenden R. Wenn Sie das Z Shell-Handbuch lesen, werden Sie feststellen, dass history-incremental-search-backwarddie emacsKeymap 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 bindkeyBefehls:
bindkey "^R" history-incremental-search-backward
Sie müssen den zleBefehl 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:
bindkey -M viins '^R' history-incremental-search-backward
bindkey -M vicmd '^R' history-incremental-search-backward
Beachten Sie auch, dass, wie Garyjohn betont, das /Zeichen in der vi "Befehl" -Schlüsselkarte an das vi-history-search-backwardWidget gebunden ist . Der Unterschied zwischen diesem Widget und dem history-incremental-search-backwardWidget besteht im Widget-Verhalten, das angewendet wird, sobald sich eines im Verlaufssuchmodus befindet. Hier sind einige der Unterschiede, die Sie feststellen werden:
- Umschalten der vi-Modi:
- Der Suchmodus wechselt
history-incremental-search-backwardzwischen mainund und vicmdKeymaps, wenn Sie das vi-cmd-modeWidget aufrufen, während Sie sich noch im Suchmodus befinden. dh von emacsModus presssing die EscTaste oder Ctrl+ XCtrl+ VTasten schaltet den Suchmodus zwischen dem emacsund vicmdkeymaps. (Das Aufrufen history-incremental-search-backwardüber die vicmdKeymap ist daher mühsam, es sei denn, Sie binden auch etwas an vi-cmd-modedie vicmdKeymap.)
- Der Suchmodus in
vi-history-search-backwardbehandelt das vi-cmd-modeWidget als accept-lineund 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.
- Suche wiederholen:
- In
history-incremental-search-backwardwerden sowohl das history-incremental-search-backwardals auch das vi-rev-repeat-searchWidget erkannt. dh (vorausgesetzt, Sie haben die Bindungen wie oben geändert) beide Ctrl+ Rund Nsuchen nach einer vorhergehenden übereinstimmenden Zeile.
- In
vi-history-search-backwardwird nur das vi-rev-repeat-searchWidget erkannt. dh (vorausgesetzt, Sie haben die Bindungen wie oben geändert) Ctrl+ Rgibt einen Piepton aus und wird ignoriert.
garyjohnzeigt eine Vim-Methode undJdeBPzeigt, 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!