上海

上海

catバイナリファイルで作業した後、誤ってtmux端末を台無しにしました。今私tmuxは混乱しました。分離して再接続しても役に立たず、再描画しても役に立ちませんでした(Cb r)。実行すると、reset残りのウィンドウではなくアクティブなウィンドウのみが再描画されます。ssty sane屋内や屋外で走るのはtmux役に立ちません。

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 titlestatus-righttmux

  • 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 

ウィンドウ名以外の項目が壊れていて、それが何であるかを把握するのが面倒すぎる場合は、この問題を解決しました。

関連情報