Über den Beginn der Einfügeaktion im Z-Shell-Vi-Modus gehen

Über den Beginn der Einfügeaktion im Z-Shell-Vi-Modus gehen

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-charWidget, 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-charWidget, 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-charinnerhalb 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.

verwandte Informationen