Gibt es eine Möglichkeit, das tmux-Fenster neu zu zeichnen, wenn ein kleinerer Monitor auf einen größeren umgestellt wird?

399

Angenommen, Sie stellen über ssh mit Terminal.app eine Verbindung zu einem Remote-Server her. Wenn Sie tmux mit einem Monitor mit größerer Auflösung von einem kleineren Monitor "anhängen", den Sie zuvor mit tmux gestartet haben, werden Punkte um die Konsole gezogen. Es passt nicht zur neuen Fenstergröße. Gibt es eine Möglichkeit, das Fenster neu zu zeichnen und zu reinigen? CTRL+ Loder CTRL- B+ Rhilft nicht. Ich konnte keinen richtigen Befehl für den Menschen finden.

% tmux -V
tmux 1.5
Nobu
quelle
7
Ich möchte wissen, wie man alle Sitzungen neu zeichnet, ohne sie zu trennen.
PJ Brunet
3
Jeder löst sich einfach ... hast du einen Weg gefunden?
Patoshi
Für eine schnelle Referenz: learnbatta.com/blog/tmux-working-with-split-terminal-95
anjaneyulubatta505
Ja, ich würde immer noch gerne die Antwort auf die Frage wissen: "Gibt es eine Möglichkeit, das Fenster neu zu zeichnen und zu reinigen?"
Jaydel

Antworten:

579

tmux begrenzt die Abmessungen eines Fensters auf die kleinste jeder Dimension in allen Sitzungen, an die das Fenster angehängt ist. Andernfalls wäre es nicht sinnvoll, den gesamten Fensterbereich für alle angeschlossenen Clients anzuzeigen.

Am einfachsten ist es, andere Clients von den Sitzungen zu trennen, wenn Sie Folgendes anhängen:

tmux attach -d

Alternativ können Sie andere Clients in eine andere Sitzung verschieben, bevor Sie eine Verbindung zur Sitzung herstellen:

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

Der Bildschirm wird wieder verkleinert, wenn ein kleinerer Client zur Sitzung wechselt.

Es gibt auch eine Variante, bei der Sie nur das Fenster "übernehmen" (das Fenster in eine neue Sitzung einbinden aggressive-resize, alle anderen Sitzungen, in denen dieses Fenster aktiv ist , festlegen und zu einem anderen Fenster wechseln), aber es ist im Allgemeinen schwieriger, Skripte zu erstellen case (und anders als "exit", da Sie die Verknüpfung des Fensters aufheben oder die Sitzung beenden möchten, anstatt sich nur von der Sitzung zu trennen).

Chris Johnsen
quelle
Beachten Sie, dass Sie die aktuelle Sitzung mit abrufen können$(tmux display-message -p '#S') , siehe: superuser.com/questions/410017/… .
GManNickG
3
Diese Antwort erhält Requisiten für Details und Wissensdatenbank. Aber siehe Shi Bs Antwort Ctrl-b + Dzur Benutzerfreundlichkeit (und zum Erinnern).
Fbicknel
"tmux löst -a" arbeitete für mich; "tmux attach -d" hat es nicht getan.
Mahemoff
(1) neuere tmux fehler auf set-option... set-remain-on-exit on. Siehe tmux # 787 . Verwenden Sie jetzt : tmux set-hook -t "$tmp" window-linked 'set remain-on-exit on.
user1902689
1
(2) Bei neuerem tmux müssen Sie das new-windowletzte Argument von etwas wie verwenden, sonst 'echo "Use Prefix + L (i.e. ^B L) to return to session.'; while(true); do read; done"wird die Nachricht nicht angezeigt . (Unter bestimmten Umständen wird es angezeigt, wenn Sie nach oben scrollen oder wenn das Terminal größer ist.) Wenn Sie dies verwenden, sind Sie wahrscheinlich ohne meinen Kommentar "(1)" oder eine andere Einstellung besser dran remain-on-exit.
user1902689
462

Sie können jederzeit CTRL- B+ SHIFT- drücken, Dum auszuwählen, welchen Client Sie von der Sitzung trennen möchten.

tmux listet alle Sitzungen mit ihrer aktuellen Dimension auf. Dann trennen Sie sich einfach von allen kleineren Sitzungen.

Shi B.
quelle
6
Klärung. Es ist Kapital D. Small 'd' löst den Kunden.
Raghuram Murthy P
2
CTRL-Bwenn das dein Präfix ist. Meins war, CTRL-Aseit ich vom Bildschirm gewechselt habe.
Blaskovicz
1
Tatsächlich müssen Sie sich von allen kleineren Sitzungen derselben Sitzungsgruppe trennen. STRG-B + UMSCHALT-D zeigt jedoch nicht an, dass jede Sitzung zu welcher Gruppe gehört. Ich würde es vorziehen, auszuführen, tmux list-sessionsdas den Sitzungsnamen, die Größe und die Gruppeninformationen anzeigt, und dann tmux kill-session -t <session_name>Sitzungen derselben Gruppe zu beenden.
Zhichang Yu
180

Eine einfachere Lösung für neuere Versionen von tmux (getestet auf 1.9) können Sie jetzt tun:

tmux detach -a

-a ist für alle anderen Clients in dieser Sitzung außer dem aktuellen

Sie können es in Ihrem. [Bash | zsh] rc aliasen

alias takeover="tmux detach -a"

Workflow: Sie können sich normal mit Ihrer Sitzung verbinden. Wenn Sie von einer anderen Sitzung gestört werden, die die Größe Ihres tmux-Fensters verringert hat, können Sie einfach anrufen takeover.

gbin
quelle
13
Vielen Dank! hat funktioniert. Wenn Sie es in einer aktiven tmux-Sitzung tun, drücken Sie einfach STRG + B (oder einen beliebigen benutzerdefinierten tmux-Befehl) und dann:detach -a
Iacchus
Oder führen Sie es einfach tmux detach -ain der Shell-Befehlszeile in Tmux aus.
JDHAO
4

Die anderen Antworten haben mir nicht geholfen, da ich nur einen Client angehängt hatte (die vorherige, die die Sitzung gestartet hat, war bereits getrennt).

Um das Problem zu beheben, folgte ich der Antwort hier (ich habe xterm nicht verwendet).

Was einfach gesagt hat:

  1. Trennen Sie sich von der tmux-Sitzung
  2. Führen Sie den resizeLinux-Befehl aus
  3. Verbinden Sie sich erneut mit der tmux-Sitzung
pev.hall
quelle
3

Ich bin gerade auf dieses Problem gestoßen und bin auf eine andere Situation gestoßen. Obwohl es wahrscheinlich nur ein Einhorn ist, dachte ich, ich würde es auslegen.

Ich hatte eine Sitzung, die kleiner war, und ich bemerkte, dass die Schriftgrößen unterschiedlich waren: Die kleinere Sitzung hatte die kleineren Schriftarten. Anscheinend hatte ich aus irgendeinem Grund die Schriftgröße des Fensters geändert.

In OS X habe ich mich also nur Cmd-+für die kleinere Sitzung entschieden, und sie rastete wieder ein.

JESii
quelle
Diese seltsame Platzierung der tmux-Statusleiste im macOS-Terminal wurde behoben. Wenn ich Terminal-Registerkarten geöffnet habe, wird die Position der tmux-Statusleiste durcheinander gebracht. Spielen mit Zoom über cmd-+oder -behebt es.
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

töte den anderen.

Balamadras
quelle
8
Scheint eine gültige Antwort auf die Titelfrage zu sein, obwohl es bessere Antworten gibt. Ich verstehe nicht, warum es in Vergessenheit geraten ist.
JoL
Ja, dies ist die einzige Antwort, die für mich funktioniert hat
Yasir Hantoush
0

Dies ist immer noch der Top-Beitrag bei der Suche, aber er ist nicht mehr gültig. Die beste Antwort ist hier , aber der TLDR ist

<c-b>:resize-window -A

datakid
quelle
0

Ich benutze Ctrl- b+, qwodurch die Flash-Nummer für jedes Fenster angezeigt wird und sie unterwegs neu gezeichnet werden.

auselen
quelle