Die Cygwin-Bash-Eingabeaufforderung bricht Zeilen in dieselbe Zeile ein


56

Ich verwende die Cygwin-Bash-Eingabeaufforderung, und bei langen Befehlen wird der Text in derselben Zeile umgebrochen, anstatt in die nächste Zeile zu wechseln, obwohl meine PS1 einfach auf "$" eingestellt ist.

Hier ist ein Screenshot,
Bildschirmfoto


11
Auf was ist die TERMUmgebungsvariable eingestellt? Für die Cygwin-Konsole sollte es so sein cygwin.
Ak2

1
@ak2 das hat das problem für mich behoben, danke. Cygwin über Mintty.
JoshuaD

Antworten:


58

Ich habe bereits MinTTY verwendet und das Entfernen des Zeilenumbruchs in PS1 hat auch nicht geholfen. Ein Ratschlag auf dieser Seite hat geholfen. Ich habe diesen Bash-Befehl ausgeführt:

kill -WINCH $$

In meinem Fall hat das einmalige Ausführen dieses Befehls das Problem behoben, auch nachdem ich mich abgemeldet und wieder angemeldet habe. Ich bin mir nicht sicher, ob dies immer der Fall ist.


1
Gemessen an -WINCH, signalisiert dies dem Bash-Prozess, dass die Größe des Terminalfensters geändert wurde. Das sollte also nach jeder Größenänderung des Terminalfensters geschehen, denke ich.
ivan_pozdeev

7
@ivan_pozdeev, ich habe gerade festgestellt, dass Sie dies nur tun müssen, wenn Sie die Größe ändern, während vim geöffnet ist: vim empfängt das Signal und zeichnet mit der neuen Größe neu, aber es wird nicht an den übergeordneten Prozess übergeben Bildschirm ist das, was es war, als vim geöffnet wurde.
Akatakritos

das hat auch bei mir
geklappt

Das hat auch bei mir funktioniert, danke @jtpereyda!
Jason R. Mick

Vielen Dank, dies war definitiv das Problem für mich - die Größe des Terminals zu ändern, während ich in vim war. Ich denke, es sollte einfach genug sein, diesen Fehler zu beheben, aber ich weiß es nicht.
Iguananaut

22

Für mich bestand die Lösung darin, die folgenden Zeilen zu .bashrc hinzuzufügen:

PS1='\[\e[32m\]\u@\h:\W> \[\e[0m\]'
TERM=cygwin
export PS1
export TERM

Beachten Sie, dass nicht druckbare Zeichen in der Eingabeaufforderung in \[... eingeschlossen sein müssen \].


6
Wie von @ ak2 in einem Kommentar unter der ursprünglichen Frage erwähnt, reicht es aus, TERM = cygwin zu exportieren, um das Problem zu beheben.
30.

1
In meinem Fall hat es nicht gereicht. Wenn PS1 Escape-Sequenzen enthält, die nicht in \ [...] eingeschlossen sind, bleibt das Umbruchproblem bestehen. Das Setzen der TERM env-Variablen mag in Ihrem Fall ausreichend sein, aber ich bezweifle es.
Digory doo

Für mich behebt dies das Problem, dass die zweite Zeile die erste Zeile überschreibt. Wenn ich jedoch kein Terminal mit genau 80er Breite verwende, sind die Cursorposition und der Textversatz immer noch wackelig (unter Verwendung von cygwin64, Mintty 2.3.7)
MM

Das Hinzufügen eines [...] Problems wurde für mich behoben.
Trismegistos

8

Ich hatte das gleiche Problem auch mit MinTTY. Das Problem hat wahrscheinlich etwas mit der primären Eingabeaufforderung (PS1) zu tun.

Die Lösung für mich war das Entfernen des letzten 'New Line'-Zeichens aus PS1 (direkt vor dem' $ '-Zeichen):

user@host ~
$ echo $PS1
\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$

user@host ~
$ export PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\$ '

user@host ~ $

Weitere Informationen finden Sie unter http://cygwin.com/ml/cygwin/2001-07/msg00140.html .

Fügen Sie Export PS1 = '[\ e] 0; \ w \ a] \ n [\ e [32m] \ u @ \ h [\ e [33m] \ w [\ e [0m] \ hinzu, um diese Änderung dauerhaft zu machen. $ 'in Ihre ~ / .bashrc-Datei.


1
Hat bei mir nicht funktioniert ...
HDave

Das hat bei mir funktioniert, aber zusätzlich zum Entfernen des letzten Zeilenumbruchs musste ich auch das Cygwin-Terminal neu starten.
Christosc


5

@ jtpereydas Antwort trifft es mit Sicherheit. Aber aus irgendeinem Grund konnte ich das nicht loslassen und etwas tiefer graben.

Erweitern Sie diesen Kommentar , wenn Sie die Größe des Terminals in vim (oder einer anderen Vollbildanwendung, die die Kontrolle über tty von der Shell übernimmt) ändern, wird das Ergebnis SIGWINCHhäufig nicht an die Shell gesendet. Wenn es also die Kontrolle zurückerhält, funktioniert es nicht weiß nicht, dass die Größe des Terminals geändert wurde.

Wenn Sie die Größe Ihres Terminals ändern, sollte es ein ioctl(..., TIOCSWINSZ, ...)auf dem Master-Pty aufrufen, auf dem vim ausgeführt wird. Dies führt wiederum zu einer killpg(SIGWINCH)auf vim befindlichen Prozessgruppe.

Das Problem ist, dass vim in einer eigenen Prozessgruppe ausgeführt wird, die sich von der Shell unterscheidet, von der es ausgeführt wurde, sodass die Bash-Shell die nicht empfängt SIGWINCHund ihre Zeilen / Spalten nicht entsprechend anpasst.

Wenn Sie eine dauerhafte Problemumgehung wünschen, ergänzen Sie shopt -s checkwinsizeIhre .bashrc. Dadurch überprüft bash die Fenstergröße ( ioctl(..., TIOCGWINSZ, ..)) nach der Rückkehr von jedem Befehl und aktualisiert seine Zeilen / Spalten.


Was machen wir mit der Frage? OP verwendet kein vim.
DavidPostill

1
Ich wollte auf eine andere Frage verweisen, die meiner Meinung nach den Zusammenhang verdeutlicht hat. Kurz gesagt, eine mögliche Ursache für das OP-Problem ist das Öffnen einer vollständigen Terminalanwendung wie vim, das Ändern der Terminalgröße und das anschließende Beenden. Wie ich bereits erklärt habe, wird SIGWINCH von der Shell nicht erkannt. Wenn Sie also vim beenden, wird das Terminal immer noch für die vorherige Größe gehalten, was zu verschiedenen Problemen beim Zeilenumbruch führt.
Iguananaut


2

In Ihren Terminaleinstellungen ist (wahrscheinlich) etwas kaputt.
Ich vermute, Sie hätten bereits versucht, diese Sitzung zu beenden und eine neue neu zu starten.

Während Sie keine Lösung für das Cygwin-Terminal erhalten, probieren Sie MinTTY aus (es ist tatsächlich besser).


1
Ich sehe dieses Problem in Cygwin auf mehreren Computern, aber MinTTY sieht besser aus und löst das Umbruchproblem. Zwei Fliegen mit einer Klappe!
14.

Beachten Sie, dass MinTTY seit Ende 2011 das Standardterminal für Cygwin ist .
Hugh W

1

Wie von akatakritos kommentiert , haben Sie wahrscheinlich die Größe Ihres Terminals geändert , während vim geöffnet war.

Wenn dies passiert, ändern Sie die Größe des Terminals einfach noch einmal und das Problem ist behoben.


Vielen Dank! Obwohl ich Cygwin nicht verwende, wurde das Problem mit dem Zeilenumbruch für mich in Bash behoben - einfach das Terminalfenster entmaximieren, es dann erneut maximieren und das Problem ist weg :)
Nick Humphrey,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.