回答:
私はすでにMinTTYを使用していましたが、PS1の改行を削除しても解決しませんでした。このページのアドバイスの1つが役に立ちました。このbashコマンドを実行しました:
kill -WINCH $$
私の場合、これを一度実行すると、ログアウトして再度ログインした後でも問題が修正されました。これが常に当てはまるかどうかはわかりません。
-WINCH
、これは端末ウィンドウのサイズが変更されたことをbashプロセスに通知します。したがって、これは各端末ウィンドウのサイズ変更後に行う必要があると思います。
私にとっての解決策は、次の行を.bashrcに追加することでした。
PS1='\[\e[32m\]\u@\h:\W> \[\e[0m\]'
TERM=cygwin
export PS1
export TERM
プロンプト内の印刷できない文字は\[
... で囲む必要があることに注意してください
\]
。
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ファイルに$ '。
@jtpereydaの答えは確かに重要です。しかし、何らかの理由でこれを手放すことができず、少し深く掘り下げました。
このコメントを展開すると、vim(またはシェルからttyを制御する他のフルスクリーンアプリケーション)中に端末のサイズを変更すると、結果SIGWINCH
はシェルに送信されないことが多いため、制御を取り戻すときに端末のサイズが変更されたことを知りません。
端末のサイズを変更するときioctl(..., TIOCSWINSZ, ...)
、vimが実行されているマスターpty でを呼び出す必要があります。これにより、killpg(SIGWINCH)
vimのプロセスグループが作成されます。
問題は、vimが実行されたシェルとは異なる独自のプロセスグループで実行されるため、bashシェルがSIGWINCH
その行/列を受信せず、適切に調整しないことです。
永続的な回避策が必要な場合は、に追加shopt -s checkwinsize
してください.bashrc
。これにより、bash ioctl(..., TIOCGWINSZ, ..)
は各コマンドから戻った後にウィンドウサイズ()をチェックし、その行/列を更新します。
akatakritosがコメントしたように、おそらくvimが開いている間に端末のサイズを変更したでしょう。
この場合、端末のサイズをもう一度変更するだけで問題は解決します。
TERM
環境変数は何に設定されていますか?Cygwinコンソールの場合、それはである必要がありますcygwin
。