時々私のzshが行末を台無しにすることがあります。

時々私のzshが行末を台無しにすることがあります。

奇妙な問題がありますが、根本的な原因が見つからず、解決策もありません。

「時々」私のzshが複雑になり、面白い方法で行末が表示され始めます。

スクリーンショット

ご覧のとおり、改行文字は無視され、%行末で興味深い結果が得られます。

この問題の原因と解決策をご存知ですか?

注:私はOS X、Iterm2、およびTmuxでzshを実行しています。

答え1

スクリーンショットは、コンピュータからターミナルに送信されたラインフィードがターミナルドライバによって自動的にキャリッジリターン/ラインフィードに変換されない、いわゆる「階段」を示しています。

元のモードを正常に復元せずにターミナルモードを一時的に変更するプログラムを実行すると、この現象が発生します。することができますいいえバイナリファイルを画面に表示した結果です。

一部のシェルでこの動作を生成できます(他のシェルでは、tcshすべてのコマンドの後にターミナルモードをリセットします)。以下は使用例ですdash

$ stty -a
speed 38400 baud; rows 40; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
$ stty -onlcr
$ stty -a
         speed 38400 baud; rows 40; columns 80; line = 0;
                                                         intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>;
                                              eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
                                            werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
                   -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
                                                                            -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
                                                                          -iuclc -ixany -imaxbel -iutf8
                       opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
                       isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
                  echoctl echoke
                                $ 

提案されているように、このresetコマンドは端末モードをリセットしますが、端末自体の機能もリセットします。また、使用することができます

stty sane

または、より具体的に

stty onlcr

ただし、reset入力は最小化されます。

追加資料:

関連情報