Bash Ctrl-A kehrt zum Zeilenanfang zurück, wird aber nicht richtig angezeigt

CTRLWenn ich vom Bash-Terminal aus auf einen Linux-Server ssh, kann ich + verwenden, Aum ordnungsgemäß zum Zeilenanfang zurückzukehren, und CTRL+ E, um zum Zeilenende zu gehen, und alles funktioniert einwandfrei.

Wenn ich bash lokal auf meinem Mac verwende, geht es bei Verwendung von CTRL+ Alogischerweise zurück zum Anfang der Zeile, zeigt den Cursor jedoch nicht an der richtigen Stelle an. Es zeigt den Cursor etwa 7 Zeichen entfernt an und aktualisiert den Zeilentext nicht korrekt.

Beispiel

find . -name "hello.cpp"

CTRL+ A!

find . -name "hello.cpp"
       ^~~ cursor shows here ????

Fügen Sie "Dies ist ein Test" ein (nur um zu zeigen)

Anzeigen:

find . this is a test -name "hello.cpp"
                      ^~~ cursor is still here ???
       ^~~~~~~~~~~~~^ text inserted here ???
^~~~~~^ unchanged for some reason

Befehl ausgeführt

this is a test find . -name "hello.cpp"

Ich benutze das gleiche

PS1=\n \e[1;95m \u@\h \e[0;32m\w \e[1;30m $(__git_ps1 " (%s)" ) \n \e[1;95m \@ \n $ \e[0;30m

wie ich es unter Linux mache.

Versions Information

  • Bash-Version: 3.2.57(1)
  • Terminalversion: 2.6.1 (361.1)
  • OS X El Capitan, 10.11.5
Eigentlich scheint der Grund das Gegenteil zu sein, Sie brauchen [ ], um die Farbverschiebungscodes gemäß dem dort zitierten Artikel einzuschließen ibm.com/developerworks/linux/library/l-tip-prompt
Das Hinzufügen \[und \]um die Farben herum löste das Problem. Es ist eigentlich das Gegenteil des anderen Problems, für das ich empfehlen würde, die Betreffzeile zu ändern, da dies ein allgemeineres Problem ist als nur für "Emacs-Stil". Soll ich als Duplikat markieren, obwohl sie vertauscht sind? Ich denke, dieses Thema würde es einfacher machen, es zu finden.
Derzeit ist es kein Duplikat, aber ich vermute, dass eine Frage mit der anderen Antwort geschrieben werden könnte, um eine gemeinsame Frage zu erstellen
@Mark Ich habe deinen Kommentar in eine Antwort umgewandelt. Fragen sollten Antworten haben. Wenn Sie Ihre eigene Antwort erstellen (Sie können die von mir hinzugefügte kopieren, wenn Sie möchten), werde ich meine löschen.

Antworten (1)

Fügen Sie \[und \]um die Farbcodes herum hinzu, damit bash die Zeilenlänge korrekt berechnen kann. Etwas wie das:

PS1=\n \[\e[1;95m\] \u@\h \[\e[0;32m\]\w \[\e[1;30m\] $(__git_ps1 " (%s)" ) \n \[\e[1;95m\] \@ \n $ \[\e[0;30m\]

(Diese Antwort stammt aus dem Kommentar von @Mark zu der Frage.)