GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Pfeiltasten in Openbsds Ksh, Befehlszeilenbearbeitung, Vi-Modus?

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 .


Linux
  1. Linux – Äquivalenter Befehlszeilenaufruf für den Flugzeugmodus?

  2. vim:Befehl nicht gefunden

  3. C++-Befehlszeilenschnittstelle

  4. Was bedeutet ein Pfeilsymbol (->) in der Befehlszeile?

  5. Zeitzonenkonvertierung per Befehlszeile

Haben Sie eine Kuh an der Linux-Befehlszeile

Diff-Befehl unter Linux

Meistern Sie die Linux-Befehlszeile

Grundlagen der Linux-Befehlszeile:sudo

Wie speichere und schließe ich die Datei beim Bearbeiten in Bash?

Clonezilla von der Befehlszeile