Ist es möglich, den Vi-Modus der Z-Shell so zu konfigurieren, dass die Rücktaste Zeichen löschen kann?Vordie Position, an der die Einfügeaktion gestartet wurde?
Im Wesentlichen das Verhalten von vim, das durch Hinzufügen der folgenden Zeile erreicht werden kann~/.vimrc
set backspace=start
– ist es möglich, dies im Z-Shell-VI-Modus zu haben?
Antwort1
Sie können dies zu Ihrer Zsh-Konfiguration hinzufügen:
bindkey -M viins '^?' backward-delete-char
bindkey -M viins '^H' backward-delete-char
Erläuterung:
Vi-Modusist nur ein Satz vorkonfigurierter Tastaturbelegungen (venen,vicmd,viopp,visuell), die bestimmte Tasten an bestimmte Widgets binden. Einige dieser Widgets sind speziell so konzipiert, dass sie sich ähnlich verhalten wie dievider Herausgeber tut dies.
In Ihrem Fall ist dies das vi-backward-delete-char
Widget, das standardmäßig an BackspacedasvenenModus, der über die spezielle Funktion verfügt, nicht über die Position hinaus zu löschen, an der der Einfügemodus aktiviert wurde.
Oftmals gibt es leicht abgewandelte Versionen dieser Widgets, die sich mehr an dieEmacsEditor. In diesem Fall wäre es das backward-delete-char
Widget, das nicht auf die aktuelle Einfügesitzung beschränkt ist. Obwohl es standardmäßig gebunden ist inEmacs-Modusgibt es keine festen Einschränkungen, welches Widget in welchem Modus verwendet werden kann. Sie können backward-delete-char
innerhalb vonvi-Modusindem Sie stattdessen einfach eine erneute Bindung durchführen, Backspaceum das Widget aufzurufen backward-delete-char
.
Der Grund für die beiden Bindungen - ^?
und ^H
- ist, dass es vom Terminal abhängt, welche der beiden Tastenkombinationen beim Drücken von gesendet wird Backspace. Standardmäßig sind beide an dasselbe Widget gebunden invi-ModussowieEmacs-Modus.