web-dev-qa-db-ja.com

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

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

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

59
wting

私はすでにMinTTYを使用しており、PS1で改行を削除しても効果がありませんでした。一つのアドバイス このページ が助けになりました。私はこのbashコマンドを実行しました:

kill -WINCH $$

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

61
jtpereyda

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

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

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

23
digory doo

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ファイルに追加します。

8
Yariv

dregad および ak2 でコメントされているように、export TERM=cygwin私の~/.bashrcファイルは私にとってこの問題を修正するのに十分でした。

6
blong

@jtpereydaの answer は確かに目立っています。しかし、どういうわけか、私はこれを手放すことができず、少し深く掘ることができませんでした。

このコメント を展開すると、vim(またはシェルからttyを制御する他のフルスクリーンアプリケーション)でターミナルのサイズを変更した場合、結果のSIGWINCHnotはシェルに送信されないため、制御を取り戻しても、端末のサイズが変更されていることはわかりません。

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

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

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

6
Iguananaut

端末の設定に問題があると思われます(おそらく)。
すでにそのセッションを終了して、新しいセッションを再開しようとしたと思います。

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

2
nik

akatakritos によるコメントのように、vimが開いている間に端末のサイズを変更した可能性があります。

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

1
olivieradam666