Cygwin bashプロンプトが同じ行で行を折り返しています


56

私はCygwin bashプロンプトを使用しています。長いコマンドの場合、PS1を単に「$」に設定しても次の行に移動するのではなく、同じ行でテキストが折り返されます。

これがスクリーンショットです
スクリーンショット


11
TERM環境変数は何に設定されていますか?Cygwinコンソールの場合、それはである必要がありますcygwin
ak2

1
@ ak2これは私のために問題を修正しました、ありがとう。MinttyのCygwin。
ジョシュア

回答:


58

私はすでにMinTTYを使用していましたが、PS1の改行を削除しても解決しませんでした。このページのアドバイスの1つが役に立ちました。このbashコマンドを実行しました:

kill -WINCH $$

私の場合、これを一度実行すると、ログアウトして再度ログインした後でも問題が修正されました。これが常に当てはまるかどうかはわかりません。


1
によって判断すると-WINCH、これは端末ウィンドウのサイズが変更されたことをbashプロセスに通知します。したがって、これは各端末ウィンドウのサイズ変更後に行う必要があると思います。
ivan_pozdeev

7
@ ivan_pozdeev、vimが開いているときにサイズを変更するだけです。vimはシグナルを取得し、新しいサイズで再描画しますが、親プロセスには渡されないため、bashはまだ画面は、vimを開いたときの状態です。
アカタクリトス

これも私のために働いた
konqui

@jtpereydaに感謝します!
ジェイソンR.ミック

おかげで、これは間違いなく私にとっての問題でした-vimで端末のサイズを変更しました。このバグを修正するのに十分簡単なはずですが、わかりません。
イグアナノー

22

私にとっての解決策は、次の行を.bashrcに追加することでした。

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

プロンプト内の印刷できない文字は\[... で囲む必要があることに注意してください \]


6
元の質問の下のコメントで@ ak2が言及したように、問題を解決するにはexport TERM = cygwinで十分です。
dregad 14

1
私の場合、それは十分ではありませんでした。PS1に\ [... \]で囲まれていないエスケープシーケンスが含まれている場合、ラッピングの問題は解決しません。TERM env変数を設定するだけで十分な場合もありますが、疑わしいです。
デゴリードゥー14

私にとっては、この修正二行目は、最初の行を上書きするという問題が、しかし、私は正確に80幅の端末を使用しない限り、オフセットカーソル位置とテキストが(cygwin64、mintty 2.3.7を使用して)まだグラグラしている
MM

\ [... \]を追加すると、問題が修正されました。
トリメジストス

8

MinTTYでも同じ問題が発生しました。問題は、おそらくプライマリプロンプト(PS1)と関係があります。

私の解決策は、PS1から最後の「改行」文字を削除することでした(「$」記号の直前)。

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 ~ $

参照については、http://cygwin.com/ml/cygwin/2001-07/msg00140.htmlを参照してください。

この変更を永続的にするには、export PS1 = '[\ e] 0; \ w \ a] \ n [\ e [32m] \ u @ \ h [\ e [33m] \ w [\ e [0m] \ 〜/.bashrcファイルに$ '。


1
私のために働かなかった...
HD 14年

これでうまくいきましたが、最後の改行を削除することに加えて、Cygwinターミナルを再起動する必要がありました。
クリストスコ


5

@jtpereydaの答えは確かに重要です。しかし、何らかの理由でこれを手放すことができず、少し深く掘り下げました。

このコメントを展開すると、vim(またはシェルからttyを制御する他のフルスクリーンアプリケーション)中に端末のサイズを変更すると、結果SIGWINCHはシェルに送信されないことが多いため、制御を取り戻すときに端末のサイズが変更されたことを知りません。

端末のサイズを変更するときioctl(..., TIOCSWINSZ, ...)、vimが実行されているマスターpty でを呼び出す必要があります。これにより、killpg(SIGWINCH)vimのプロセスグループが作成されます。

問題は、vimが実行されたシェルとは異なる独自のプロセスグループで実行されるため、bashシェルがSIGWINCHその行/列を受信せず、適切に調整しないことです。

永続的な回避策が必要な場合は、に追加shopt -s checkwinsizeしてください.bashrc。これにより、bash ioctl(..., TIOCGWINSZ, ..)は各コマンドから戻った後にウィンドウサイズ()をチェックし、その行/列を更新します。


質問とvimはどう関係しますか?OPはvimを使用していません。
DavidPostill

1
接続をより明白にしたと思う別の質問を参照するつもりでしたが、要するに、OPの問題の考えられる原因は、vimのような完全なターミナルアプリケーションを開き、ターミナルのサイズを変更してから終了することです。説明したように、SIGWINCHはシェルには表示されないため、vimを終了しても端末は以前のサイズであると見なされ、さまざまな行の折り返しの問題が発生します。
イグアナノー


2

端末設定で何かが壊れている(おそらく)。
すでにそのセッションを終了して新しいセッションを再起動しようとしていると思います。

Cygwinターミナルの解決策は得られませんが、MinTTYを試してみてください(実際にはより良い方法です)。


1
この問題は複数のマシンのCygwinで見られますが、MinTTYは見栄えが良く、ラッピングの問題を解決します。一石二鳥!
11

MinTTYは2011年後半以降の Cygwinのデフォルトのターミナルであることに注意してください。
ヒューW

1

akatakritosがコメントしたように、おそらくvimが開いている間に端末のサイズを変更したでしょう。

この場合、端末のサイズをもう一度変更するだけで問題は解決します。


どうも!私はcygwinを使用していませんが、これはbashでの「同じ行での折り返し」の問題を修正しました。ターミナルウィンドウを最大化せずに再度最大化すると問題はなくなります:)
Nick Humphrey
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.