小さいモニターを大きいモニターに切り替えるときにtmuxウィンドウを再描画する方法はありますか?


399

たとえば、Terminal.appを使用して、ssh経由でリモートサーバーに接続しているとします。以前にtmuxを起動した小さなモニターから大きな解像度のモニターで「tmux attach」すると、コンソールの周りにドットが描画されます。新しいウィンドウサイズに適合しません。ウィンドウを再描画してきれいにする方法はありますか?CTRL+ LまたはCTRL- B+ Rは役に立ちません。人に適切な命令を見つけることができませんでした。

% tmux -V
tmux 1.5

7
すべてのセッションを切り離さずに再描画する方法を教えてください。
PJ Brunet 2013年

3
誰もがデタッチするだけ...
Patoshiパトシ


ええ、私はまだ質問への答えを知りたいです:「ウィンドウを再描画してきれいにする方法はありますか?」
ジェイデル

回答:


579

tmuxは、ウィンドウが接続されているすべてのセッションにわたって、ウィンドウのサイズを各サイズの最小値に制限します。これを行わなかった場合、接続されているすべてのクライアントのウィンドウ領域全体を表示する賢明な方法はありません。

接続するときに、セッションから他のクライアントを切り離すのが最も簡単です。

tmux attach -d

または、セッションに接続する前に、他のクライアントを別のセッションに移動できます。

takeover() {
    # create a temporary session that displays the "how to go back" message
    tmp='takeover temp session'
    if ! tmux has-session -t "$tmp"; then
        tmux new-session -d -s "$tmp"
        tmux set-option -t "$tmp" set-remain-on-exit on
        tmux new-window -kt "$tmp":0 \
            'echo "Use Prefix + L (i.e. ^B L) to return to session."'
    fi

    # switch any clients attached to the target session to the temp session
    session="$1"
    for client in $(tmux list-clients -t "$session" | cut -f 1 -d :); do
        tmux switch-client -c "$client" -t "$tmp"
    done

    # attach to the target session
    tmux attach -t "$session"
}
takeover 'original session' # or the session number if you do not name sessions

小さなクライアントがセッションに切り替えると、画面は再び縮小します。

ウィンドウを「引き継ぐ」(ウィンドウを新しいセッションにリンクし、を設定しaggressive-resize、そのウィンドウがアクティブになっている他のセッションを他のウィンドウに切り替える)バリエーションもありますが、一般的にスクリプト化するのは困難です。ケース(「セッション」から切り離すのではなく、ウィンドウのリンクを解除したり、セッションを強制終了したりするため、「終了」とは異なります)。


で現在のセッションを取得できることに注意してください。superuser.com$(tmux display-message -p '#S') / questions / 410017 / …を参照してください。
GManNickG 2014

3
この答えは、詳細と知識ベースの小道具を取得します。ただしCtrl-b + D、使いやすさ(および覚えやすさ)については、Shi B.の回答を参照してください。
fbicknel 2017

「tmux detach -a」は私にとってはうまくいった。「tmux attach -d」はそうではありませんでした。
mahemoff 2017

(1)の新しいtmuxエラーset-option... set-remain-on-exit ontmux#787を参照してください。ここで、次を使用しますtmux set-hook -t "$tmp" window-linked 'set remain-on-exit on
user1902689 2018年

1
(2)新しいtmuxではnew-window、次のような最後の引数を使用する'echo "Use Prefix + L (i.e. ^B L) to return to session.'; while(true); do read; done"必要があります。そうしないと、メッセージが表示されません。(状況によっては、上にスクロールした場合、またはターミナルがより高い場合に表示されます。)これを使用する場合、私のコメント "(1)"または何かの設定なしで表示したほうがよいでしょうremain-on-exit
user1902689

462

いつでもCTRL- B+ SHIFT- Dを押して、セッションから切断するクライアントを選択できます。

tmuxは、すべてのセッションを現在の次元でリストします。次に、すべての小さいサイズのセッションから切り離します。


6
明確化。大文字のDです。スモール 'd'はクライアントを切り離します。
Raghuram Murthy P 2017

2
CTRL-Bそれがあなたのプレフィックスなら。私がCTRL-A画面から切り替えてからです。
Blaskovicz

1
実際には、同じセッショングループのすべての小さいサイズのセッションから切り離す必要があります。ただし、CTRL-B + SHIFT-Dでは、各セッションがどのグループに属しているかは表示されません。tmux list-sessionsセッション名、サイズ、グループ情報を表示して実行しtmux kill-session -t <session_name>、同じグループのセッションを強制終了したいと思います。
Zhichang Yu

180

tmuxの最近のバージョン(1.9でテスト済み)でのより簡単な解決策は次のとおりです。

tmux detach -a

-a 現在のセッションを除く、このセッションの他のすべてのクライアント用です

。[bash | zsh] rcでエイリアスを付けることができます

alias takeover="tmux detach -a"

ワークフロー:通常どおりセッションに接続できますtakeover。また、tmuxウィンドウサイズを強制的に縮小した別のセッションに悩まされている場合は、を呼び出すだけで済みます。


13
どうもありがとう!働いた。アクティブなtmuxセッションで実行している場合は、CTRL + B(またはカスタムのtmuxコマンド)を押すだけです:detach -a
Iacchus

またはtmux detach -a、Tmux内のシェルコマンドラインで実行します。
jdhao 2018年

4

クライアントを接続しただけだったので、他の回答は役に立ちませんでした(セッションを開始した以前の回答はすでに切り離されています)。

それを修正するために、私はここで答えに従いまし(私はxtermを使用していませんでした)。

それは単に言いました:

  1. tmuxセッションから切り離す
  2. resizeLinuxコマンドを実行する
  3. tmuxセッションに再接続

3

私はこの問題に遭遇し、別の状況に出くわしました。たぶんユニコーンなのですが、レイアウトすると思いました。

小さいセッションが1つあり、フォントサイズが異なることに気づきました。小さいセッションのフォントは小さいです。どうやら、何らかの理由でウィンドウのフォントサイズを変更したようです。

したがって、OS XではCmd-+、より小さなサイズのセッションで実行しただけで、元の場所に戻りました。


macOS端末でのtmuxステータスバーの奇妙な配置が修正されました。端末タブを開いていると、tmuxステータスバーの位置が乱れます。ズームで遊んcmd-+だり、それを-修正したりします。
Paul

0
ps ax | grep tmux
17685 pts/22   S+     0:00 tmux a -t 13g2
17920 pts/11   S+     0:00 tmux a -t 13g2
18065 pts/19   S+     0:00 grep tmux

もう一人を殺しなさい。


8
より良い答えがあるにもかかわらず、タイトルの質問に対する有効な答えのようです。それが忘却に反対された理由がわかりません。
JoL

はい、これは私のために働いた唯一の答えです
ヤシルHantoush


0

私はCtrl- b+ を使用します。qこれにより、各ペインの番号が点滅し、途中で再描画されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.