3 Stimmen

GNU Readline automatisch schließen

Ich arbeite an verschiedenen GNU Readline-basierten CLIs, und es wäre dramatisch beschleunigen, wenn es eine Möglichkeit gäbe, Klammern und Anführungszeichen bei der Eingabe automatisch geschlossen werden.

So kann die Eingabe einer ' o ( auf Bash (oder anderen CLIs) würde eigentlich das schließende Anführungszeichen oder die Klammer anhängen '' o () und platzieren Sie den Cursor zum Schreiben dazwischen.

Ich habe mich eine ganze Weile umgesehen und versucht, etwas darüber herauszufinden (z.B.. ~/.inputrc Einstellung), habe aber nichts gefunden, und ich frage mich, ob das überhaupt machbar ist. Jeder Kommentar würde geschätzt werden.

3voto

chepner Punkte 440093

Es ist ein bisschen kompliziert, aber machbar. Als bash mando:

bind '"(" "\C-v()\e[D"'
bind '"\"" "\C-v\"\C-v\"\e[D"'

Als Schauplatz in .inputrc (also jedes Programm, das readline erhält das Verhalten):

"(": "\C-v()\e[D"
"\"": "\C-v\"\C-v\"\e[D"

Sie können jeder Taste die Tastenkombination Strg-v voranstellen, um "einfache" Anführungszeichen und linke Klammern einzugeben, ohne dass das automatische Schließen ausgelöst wird.

Die obigen Ausführungen gehen von Emacs-Tastaturbindungen aus. Für vi-Bindungen verwenden Sie

bind '"(": "\C-v()\ei"'
bind '"\"" "\C-v\"\C-v\"\ei"'

o

"(": "\C-v()\ei"
 "\"": "\C-v\"\C-v\"\ei"

Im Wesentlichen ersetzen Sie einfach die [D mit i ; anstatt die Escape-Sequenz zu senden, um den Cursor nach links zu bewegen, senden Sie einfach \e um nach dem Einfügen der Klammern/Anführungszeichen in den Befehlsmodus zurückzukehren und dann erneut in den Einfügemodus zu wechseln, wodurch der Cursor innerhalb der soeben eingegebenen Zeichen positioniert werden sollte.

0voto

xojoc Punkte 161

Genau das zu tun, was Sie wollen, ist unmöglich, aber es gibt eine Lösung. Fügen Sie dies in inputrc ein:

"\C-x\"": "\"\"C-b"

Laufen:

info readline "comm" "readline init" "sample"

für die gesamte Stichprobe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X