Ich verwende den Standard ksh
auf OpenBSD 6.2 (basierend auf pdksh
) mit aktiviertem Vi-Befehlszeilen-Bearbeitungsmodus.
Ich versuche, die Pfeiltasten als Ergänzung zu h zum Laufen zu bringen , l , j und k (da ich auf einer Dvorak-Tastatur bin). Soweit ich das beurteilen kann, funktionieren sie überhaupt nicht. Dabei spielt es keine Rolle, ob ich mich im „Eingabe“- oder „Kommando“-Modus befinde.
Die aktuellen Tastenbelegungen beinhalten:
^[[A = up-history
^[[B = down-history
^[[C = forward-char
^[[D = backward-char
Dies ist auch die Zeichenfolge, die meine Pfeiltasten erzeugen, wenn ich Strg+V verwende Pfeiltaste .
Die Pfeiltasten funktionieren wie erwartet im Emacs-Befehlszeilen-Bearbeitungsmodus, aber als langjähriger Vi-Benutzer fühle ich mich etwas verkrüppelt, wenn ich sie verwende.
Mein Gefühl ist, dass das Escape, das von der Pfeiltaste gesendet wird, so interpretiert wird, als ob ich Esc gedrückt hätte … Ich erhalte das äquivalente Verhalten, indem ich manuell z. Esc [ A wie wenn ich Pfeil nach oben drücke (versetzt mich in den Befehlsmodus und dann in den Einfügemodus am Ende der Zeile).
Frage:Hat jemand in OpenBSDs ksh
die Pfeiltasten dazu gebracht, intuitiv im Vi-Modus zu arbeiten ?
Akzeptierte Antwort:
Ich habe einen kurzen Ausflug in /usr/src/bin/ksh
gemacht auf meinem OpenBSD-System, da ich sowieso die aktuellen Quellen ausgecheckt hatte. Ich habe einen flüchtigen Blick auf c_ksh.c
geworfen , emacs.c
und vi.c
und es sieht so aus, als ob der Vi-Modus in pdksh
nachgerüstet wurde von nsh
irgendwann (um 1989/1990). Die genauen verwendeten Wörter sind
/* $OpenBSD: vi.c,v 1.55 2018/01/16 22:52:32 jca Exp $ */
/*
* vi command editing
* written by John Rochester (initially for nsh)
* bludgeoned to fit pdksh by Larry Bouzane, Jeff Sparkes & Eric Gisin
*
*/
Die bind
-fähige Funktionen leben alle in emacs.c
, ebenso wie x_bind()
Funktion, die von bind
aufgerufen wird eingebaut, während vi.c
scheint eine eigene Implementierung einiger von ihnen unter anderen Namen zu haben, die nicht von x_bind()
aufgerufen werden .
Daher denke ich, dass ich daraus schließen kann, dass der bind
builtin ist in dieser speziellen Shell ein No-Op im Vi-Modus.
UPDATE (2018-02-04):Nachdem dies dem openbsd-misc
gemeldet wurde Liste wurde bestätigt, dass bind
tut tatsächlich nichts im Vi-Befehlszeilen-Bearbeitungsmodus. Ein Patch wird eingefügt, um den ksh
zu modifizieren Handbuch zu OpenBSD, damit dies erwähnt wird:
bind string=[editing-command] ...
Im Emacs-Bearbeitungsmodus , wird der angegebene Bearbeitungsbefehl an
die angegebene string
gebunden . Zukünftige Eingabe des string
bewirkt, dass der
Bearbeitungsbefehl sofort aufgerufen wird. Bindungen haben keine
Wirkung im Vi-Bearbeitungsmodus .