web-dev-qa-db-ja.com

時々私のzshは行の終わりを台無しにします

私にはこの奇妙な問題があり、その原因も解決策も見つかりません。

「時々」私のzshが台無しになり、面白い方法で行末の表示を開始します。

Screenshot

ご覧のとおり、改行は無視され、面白い%行末。

何が原因で、どのように解決するか知っていますか?

注:私はOS X、Iterm2とTmux内のzshを実行しています。

5
nobe4

スクリーンショットは、「階段状」と呼ばれるものを示しています。ここでは、コンピューターから端末に送信された改行が、端末ドライバーによって自動的にキャリッジリターン/ラインフィードに変換されません。

これは、ターミナルモードを一時的に変更するプログラムを実行した後に表示されますが、元のモードの復元には成功しません。バイナリファイルを画面にキャットした結果として、これは決して表示されません。

一部のシェルでこの動作を生成できます(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は入力が最も少なくて済みます。

参考文献:

3
Thomas Dickey