Machen Sie den vi-Modus von Bash ' standardmäßig auf “ normal ” Vi-Modus (nicht “ ”) einfügen und den Cursor am Zeilenanfang platzieren, wobei KornShell

Ich versuche, Bash dazu zu bringen, das Verhalten von KornShell93 (ksh) nachzuahmen, wenn sich die Shells im Vi-Befehlszeilen-Bearbeitungsmodus befinden.

KornShell Der Standardwert ist „Vi-Normalmodus“ (auch als „Befehlsmodus“ bezeichnet). Außerdem wird der Cursor beim Zurückgehen durch den Befehlszeilenverlauf ganz am Anfang der Befehlszeile platziert. Dies steht im Gegensatz zu Bash, mit dem Sie in „Vi“ versetzt werden Einfügemodus „und am Ende der Befehlszeile.

In den Antworten auf“ Konfiguration des Bash-vi-Modus standardmäßig auf Befehlsmodus “ Es wurde der Schluss gezogen, dass es keine Möglichkeit gibt, Bash standardmäßig auf den „Vi-Normalmodus“ zu setzen, wenn die Vi-Befehlszeilenbearbeitung aktiviert ist.

Dies war mehr als fünf Jahre Ich frage mich, ob sich dies seitdem geändert hat.

Und wie wäre es, wenn Sie den Cursor automatisch am Anfang der Befehlszeile platzieren? Gibt es eine unbekannte Readline-Magie für mich, die mir dabei helfen kann?

Ich verwende die aus der Quelle kompilierte Bash-Version 4.4.5 (1) (OpenBSD shells/bash port) auf OpenBSD-current (Januar 2017).

Kommentare

  • Als Datenpunkt verhält sich Zsh wie Bash ^ H ^ H ^ H ^ HReadline, nicht wie ksh. (Das Verhalten von Bash ' ist nicht ' nicht wirklich Bash ' s, es ' s Readline ' s, die Bash verwendet.)

Antwort

Es scheint, dass es keine angemessene Möglichkeit gibt, ein Esc in die Befehlszeile einzufügen.

Während Sie sich in vi-insert Die meisten alpha/numeric Tasten werden verwendet. Esc ist ziemlich weit entfernt und jeder Akkord (wie Alt-j () was funktioniert)) scheinen komplexer als gewünscht zu sein. Es gibt also eine Möglichkeit, zwei -Tasten in eine Konfiguration zu konvertieren rable string.

Die Problemumgehung basiert auf der Idee von Diese Antwort

Fügen Sie dies einfach zu .inputrc:

 set editing-mode vi set vi-ins-mode-string \1\e[6 q\2 set vi-cmd-mode-string \1\e[2 q\2 set keymap emacs "\ee": vi-editing-mode "jk": "\eejk" "kj": "\eejk" set keymap vi-insert "\ee": emacs-editing-mode "jk": vi-movement-mode "kj": vi-movement-mode set keymap vi-command "\ee": emacs-editing-mode 

Damit, egal wo Sie beginnen, entweder emacs oder vi Wenn Sie beide jk drücken, gelangen Sie in den vi-Befehlsmodus am Zeilenanfang .

Außerdem können Sie mit Esc in den emacs -Modus wechseln e .

Kommentare

  • Ich kann ' stimme dem nicht genug zu! Ich habe das Emacs-Zeug losgeworden und brauche nur die Verknüpfung " jk ", ich habe keine ' brauche nicht " kj ", also habe ich einfach: set editing-mode vi set vi-ins-mode-string \1\e[6 q\2 set vi-cmd-mode-string \1\e[2 q\2 set keymap vi-insert "jk": vi-movement-mode und jetzt bin ich es glücklich!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.