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!