Wenn Sie den vi-Modus (set -o vi) mit Bash verwenden, wäre es schön, eine Eingabeaufforderung zu haben, die von dem Modus abhängt, in dem Sie sich gerade befinden (Einfügen oder Befehl). Wie findet man diesen Bearbeitungsmodus heraus?
113
Antworten:
Fresh Bash 4.3 und Readline 6.3 haben etwas für euch .. aus dem Changelog:
Also setzen
in / etc / inputrc oder ~ / .inputrc (thx stooj) sollte sich auf alle Ihre Readline-fähigen Programme auswirken;)
quelle
Bash 4.4 / Readline 7.0 bietet Unterstützung für vom Benutzer einstellbare Moduszeichenfolgen .
Sie können die Beta-Versionen ausprobieren, aber sie scheinen im Moment etwas fehlerhaft zu sein. Sie unterstützen auch noch nicht die Angabe, wo in der Eingabeaufforderung die Modusanzeige erscheinen soll (was meiner Meinung nach die Killerfunktion ist).
Wenn Sie nicht warten möchten und keine Angst vor einer kleinen Kompilierung haben, habe ich gepatchte Versionen von Bash 4.3 und Readline 6.3 für Github veröffentlicht, die diese Funktionalität unterstützen.
Mit den gepatchten Versionen können Sie Folgendes tun:
Weitere Informationen, einschließlich der Installation, finden Sie unter https://github.com/calid/bash
quelle
Nach der Suche in Google, dem Durchsuchen der Bash-Manpage und dem Durchsuchen des Bash-Quellcodes (lib / readline / vi_mode.c) scheint es keine einfache Möglichkeit zu geben, die Eingabeaufforderung zu ändern, wenn Sie vom Einfügemodus in den Befehlsmodus wechseln. Es sieht so aus, als ob hier jemand die Möglichkeit hat, die Bash-Quelle zu patchen, da es Aufrufe zum Starten und Stoppen der Modi in der Quelle gibt.
Als ich Ihren Beitrag sah, interessierte ich mich für die Bash-Vi-Modus-Einstellung. Ich liebe vi und würde warum nicht auf der Kommandozeile. Es sieht jedoch so aus, als müssten wir nachverfolgen, ob wir uns ohne sofortige Änderung im Einfügemodus befinden (so sagen viele Forenbeiträge). Für das, was es wert ist, befinden Sie sich immer im Einfügemodus, es sei denn, Sie drücken ESC. Macht es ein bisschen einfacher, aber nicht immer so intuitiv.
Ich stelle Ihre Frage, da ich interessiert bin, wohin das führt.
quelle
Mehrzeilige Eingabeaufforderung und
.inputrc
Inputrc hat eine Option , ein zeigen
+
für Einsatz und:
für die normalen Modus, durch Zugabeset show-mode-in-prompt on
in dem~/.inputrc
als eMPee584 schrieb, aber das funktioniert nicht gut mit mehrzeiligen Eingabeaufforderung (mit älteren Versionen von bash und Readline-).Eine Lösung besteht aus einer einzelnen Zeile
PS1
(>
) und einer Funktion, die vor der Eingabeaufforderung etwas wiedergibt. Es ist in Bash eingebaut und heißtPROMPT_COMMAND
.Die üblichen Eingabeaufforderungszeichenfolgen sind im Echo von printf nicht verfügbar. Das
-e
ist, Farbcodes zu interpretieren, und es ist nicht notwendig,\[
oder hinzuzufügen\]
, was sowieso nicht funktioniert.Einfügemodus :
Normaler Modus:
Durch Drücken der Tabulatortaste wird nur die PS1 wiederholt, was für mich sinnvoll ist:
(Quelle)
quelle
vi-cmd-mode-string
oder verwendenvi-ins-mode-string
, sollten diese vorangestellt\1
und nachfixiert werden\2
. Siehe hier . Auch\[
und\[
sollte noch ausgegeben werden, aber Sie benötigen\\[
und\\]
in printf.Das habe ich in
~/.inputrc
Einfügemodus ist blau gefärbt.
Befehlsmodus ist es gelb gefärbt.
Der Nachteil ist, dass es nicht in einer
tty
Bedeutung angezeigt wird, sondern nur in einem Terminalemulator nur die Farben.quelle
Ich versuche auch, eine Anzeige für den BASH vi-Modus zu erhalten, und Sie alle haben gelernt, dass es einfach klingt und es noch keine Möglichkeit gibt, dies zu tun.
Mein aktueller Ansatz ist: Drücke 'a', wenn ich nicht sicher bin, welcher Modus ist. WENN 'a' nach BASH PROMOT erscheint, erfahre ich, dass ich mich im 'INSERT'-Modus befinde. DANN drücke ich 'RETURN' und fahre fort. Dies ist eine einfache Möglichkeit für mich, den kleinen Ärger zu lösen.
Übrigens, ich 'alias a =' cal 'oder etwas anderes, um dem leeren Treffer' eine 'kleine Nützlichkeit zu geben.
quelle
für mehrzeilige Eingabeaufforderung wie dieses Bild
Meine Arbeit ist so
meine Bash-Eingabeaufforderung
.inputrc
hoffe das hat dir geholfen
quelle
Unterschiedlicher Eingabeaufforderungs- und Cursorstil über
.inputrc
Zuerst sollten Sie sicherstellen, dass Sie eine Bash-Version ausführen, die höher ist als
4.3
:Dann setzen Sie die folgenden Zeilen in Ihre
~/.inputrc
:Im Befehlsmodus wird der Cursor als Block angezeigt.
Im Einfügemodus wird der Cursor als vertikaler Balken angezeigt.
Die Eingabeaufforderung selbst sieht dann je nach Modus folgendermaßen aus:
quelle