cat
バイナリファイルで作業した後、誤ってtmux端末を台無しにしました。今私tmux
は混乱しました。分離して再接続しても役に立たず、再描画しても役に立ちませんでした(Cb r)。実行すると、reset
残りのウィンドウではなくアクティブなウィンドウのみが再描画されます。ssty sane
屋内や屋外で走るのはtmux
役に立ちません。
すべてのウィンドウで私が入力した内容について正常なフィードバックを受けましたが(ターミナルがめちゃくちゃになった直後の最初の呼び出しでreset
この問題が解決しました)、ステータスバーを変更できないようです。
では、gnome-terminal
ステータスバーが更新されるたびにステータスバーが大きくなります(上記のスクリーンショットを参照)。たとえば、新しいアプリケーションを実行したり、ウィンドウを切り替えたり、ウィンドウのサイズを変更したりすると、これが発生します。強制的に再描画(C-b r
、run、reset
またはgnomeターミナルメニューを介して)を実行すると、ステータスバーは1行に減りますが、まだ壊れています。
では、xterm
ステータスバーは1行のままですが、図のようにまだ壊れています。
私はtmux 1.5を使用しています。
- -terminalをどのように修正しますか
tmux
?
このバグレポート2008年以降、同じ問題が説明されているように見えますが、修正されたとマークされています。どのバージョンで修正されたかはわかりませんが、tmux 1.5には2008修正が含まれている必要があります。
答え1
ウィンドウ4の名前を変更してください
- ウィンドウ4に切り替える: Control+b 4
- ウィンドウの名前を変更する:Control++ b , ControlmyNewnameu
(中央にカンマがあります)
または:Control+b :rename-window myNewname
答え2
混乱をクリーンアップするには、2つのコマンドシーケンスが必要です。
まず、間違ったウィンドウでこのコマンドを実行してください(現在の場合でも該当ssh
)。
stty sane; printf '\033k%s\033\\\033]2;%s\007' "`basename "$SHELL"`" "`uname -n`"; tput reset; tmux refresh
次に、実行中のマシンで実行しますtmux
(内部および外部で動作tmux
)。
次のコマンドは、すべての
tmux
インスタンスに影響します。これは、複数の現在のウィンドウの左側の状態を変更できます。その機能が必要ない場合はそのままにしてください。
tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done
上海
これは、他の回答やコメントで見つかったすべての内容を解決するためにまとめられています。現在は2番目の命令がごく一部しか残っていないようです。 (下記の「欠落ビット」を参照)
tmux
これがどのように機能するかを理解するために、まず、およびのステータス行を削除しますtty
。次に、常に利用可能でなければならない方法(コマンドとは異なりreset
)を使用して再修正します。
tmux
端末を(仮説的にUTF-8
)使用できないようにする方法
stty -echo; printf '\016\033k%2000s\\\033\033]2;\355\007' $'\302\217'
警告する:上記のコマンドを実行した後、シェルは目が遠くて耳を傾けたように見え、未知の外国語で話すことができない音だけを話しているようです。この問題を解決する方法については、下記をご覧ください。
説明する:
stty -echo
端末タイプ応答終了printf '\016'
を行うSO
ので、代替文字セットにあります。printf '\033]2;%s\007' 'right status text'
正しい状態を設定してください。この場合、$'\355
デモエラーが表示されます。printf '\033k%2000s\033\\' $'\302\217'
ウィンドウタイトル名の設定
これは、いくつかの対話型コマンドがクラッシュしてシェルに戻った後に端末に表示される組み合わせです。 (IMHO、/bin/cat
迷惑をかけることはできませんが、通常はstty -echo
対話型コマンドでvim
これを設定します。)
今この混乱を整理してください
stty sane; printf '\033k%s\033\\\033]2;%s\007' "$(basename "$SHELL")" "$(uname -n)"; tput reset; tmux refresh
メモ:コピーして貼り付けを使用して(貼り付け中に押し続ける必要があるかもしれません)、上記のコマンドを使用して.soをめちゃくちゃ
Shift
にした場合は、貼り付けてEnterキーを押すだけです。tty
説明する:
stty sane
入力時にエコーが発生するように「一般」端末パラメータを設定します。printf '\033k%s\033\\' "$(basename "$SHELL")"
ウィンドウのタイトルを再び一般に設定します。tmux rename-window "$(basename "$SHELL")"
これを使用することを選択できますが、エスケープシーケンスが常に有効な場合tmux rename-window
にのみ可能です。tmux
printf '\033]2;%s\007' "$(uname -n)"
ステータス権限をデフォルト表示にリセットします。 (壊れたコンテンツtmux set status-right "something"
のみが出力されるため、一部のデモバグのみが公開されるため、この方法を使用しないでください。また、ウィンドウのタイトルを直接設定するコマンドが見つからなかったことも注意してください。)pane title
status-right
tmux
tput reset
問題が発生した場合に備えて端末をリセットしてください。tmux refresh
存在する可能性のある他の残骸を削除するには、画面を更新してください。
欠落ビット
printf '\033k%s\033\\' "$(basename "$SHELL")"
左のステータス領域に現在のコマンドを表示する標準機能が失われました。この能力は実行されたtmux
後に消えます。良い方法は見つかりませんでしたが、元の状態に復元する方法はありません。printf '\033k%s\033\\' "something"
ただし、以下の説明で説明するように、次の設定を使用して同様の機能を代替tmux
として有効にすることができますtmux
。
set-window-option automatic-rename on
現在のウィンドウで、「Escape」(「Escape」はコマンドキー)
tmux
を使用してアクセスできるコマンドラインでこれを実行してから、コマンドを入力できます。:
tmux
または、現在の端末で実行し
tmux set-window-option automatic-rename on
ても正しいシェルレベルに直接ない場合は失敗します。たとえば、またはsudo
では動作しませんssh
。または、
tmux
現在のセッションで別のウィンドウを開き、次のコマンドを実行します。for a in `tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done`
または、実行中のシステムで別のシェルを開き、次の
tmux
コマンドを実行します(tmuxの外部にあります)。tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done
PS:このソリューションを整理するのに役立つすべての人に感謝します。
答え3
あなたが見ている特定の問題は、ウィンドウ4の名前/タイトルに関連しています。 (明らかに)長すぎて奇妙な文字が含まれていると、tmuxがより短く測定されるようになります(ステータスバーを画面の幅に合わせて適切に制限しない)、リセットする方法がわかりません。私のシステムはフォアグラウンドプロセスの名前を追跡します。)ウィンドウを閉じる必要があるかもしれません。
答え4
tmux set-option -g status off && tmux set-option -g status on
ウィンドウ名以外の項目が壊れていて、それが何であるかを把握するのが面倒すぎる場合は、この問題を解決しました。