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.
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.
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
\].
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):
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.
@ 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.
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).
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 :)
TERM
Umgebungsvariable eingestellt? Für die Cygwin-Konsole sollte es so seincygwin
.Antworten:
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:
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.
quelle
-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.Für mich bestand die Lösung darin, die folgenden Zeilen zu .bashrc hinzuzufügen:
Beachten Sie, dass nicht druckbare Zeichen in der Eingabeaufforderung in
\[
... eingeschlossen sein müssen\]
.quelle
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):
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.
quelle
Wie von dregad und ak2 kommentiert, genügte die Einstellung
export TERM=cygwin
in meiner~/.bashrc
Datei, um dieses Problem für mich zu beheben.quelle
@ 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
SIGWINCH
hä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 einerkillpg(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
SIGWINCH
und ihre Zeilen / Spalten nicht entsprechend anpasst.Wenn Sie eine dauerhafte Problemumgehung wünschen, ergänzen Sie
shopt -s checkwinsize
Ihre.bashrc
. Dadurch überprüft bash die Fenstergröße (ioctl(..., TIOCGWINSZ, ..)
) nach der Rückkehr von jedem Befehl und aktualisiert seine Zeilen / Spalten.quelle
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).
quelle
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.
quelle