447

假设您正在使用 Terminal.app 通过 ssh 连接到远程服务器。当您从先前启动 tmux 的较小显示器“tmux attach”到较大分辨率的显示器时,它会在控制台周围绘制点。它不适合新的窗口大小。有什么方法可以重绘和清理窗口吗?CTRL+LCTRL- B+R没有帮助。我在 man 上找不到任何适当的命令。

% tmux -V
tmux 1.5
4

11 回答 11

646

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并将任何其他具有该窗口活动的会话切换到其他窗口),但通常更难编写脚本case(与“exit”不同,因为您希望取消链接窗口或终止会话,而不是仅仅从会话中分离)。

于 2011-10-19T09:51:57.937 回答
518

您可以随时按CTRL- B+ SHIFT-D选择要从会话中分离的客户端。

tmux 将列出所有会话及其当前维度。然后,您只需从所有较小的会话中分离出来。

于 2014-01-03T16:28:24.767 回答
191

您现在可以对最新版本的 tmux(在 1.9 上测试)更简单的解决方案:

tmux detach -a

-a用于此会话中的所有其他客户端,当前客户端除外

你可以在你的 .[bash|zsh]rc 中给它起别名

alias takeover="tmux detach -a"

工作流程:您可以正常连接到您的会话,如果您被另一个会话强制降低您的 tmux 窗口大小所困扰,您可以简单地调用takeover.

于 2013-10-09T18:47:25.373 回答
31

这仍然是搜索时的顶部帖子,但它不再有效。最佳答案在这里,但 TLDR 是

<c-b>:resize-window -A

于 2020-05-13T01:34:05.457 回答
8

其他答案对我没有帮助,因为我只连接了客户端(启动会话的前一个已经分离)。

为了解决它,我按照这里的答案(我没有使用 xterm)。

简单地说:

  1. 从 tmux 会话中分离
  2. 运行resizelinux命令
  3. 重新连接到 tmux 会话
于 2017-07-28T04:45:29.437 回答
7

您可以使用<Ctrl-B> :+at -d <CR>重绘 tmux 窗口。

于 2021-07-11T14:57:48.967 回答
3

我刚刚遇到了这个问题,偶然发现了另一种情况。虽然它可能只是一只独角兽,但我想我会把它摆出来。

我有一个较小的会话,我注意到字体大小不同:较小的会话具有较小的字体。显然,我出于某种原因更改了窗口字体大小。

所以在 OS X 中,我只是Cmd-+在较小的会话上做了,然后它又恢复了原位。

于 2017-05-19T11:28:32.290 回答
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

杀死另一个。

于 2014-01-31T18:04:03.497 回答
0

我使用Ctrl- b+q使其为每个窗格闪烁编号,并在途中重新绘制它们。

于 2020-06-02T12:50:14.237 回答
0

由于使用 iTerm 的 tmux 集成(即tmux -CC a),我遇到了同样的问题。其他答案中提到的分离选项都不适合我,因为没有“其他会话”可以分离。

我的理解是 iTerm 的 tmux 客户端似乎很难在附加会话上设置窗口大小,因此后续附件似乎尊重先前调整大小的窗口大小。唉,我最终通过将 iTerm 客户端重新连接到 tmux,tmux -CC a并在 GUI 中手动调整为完整窗口大小(在这里使用鼠标不开心,但不幸的是,这最终奏效了)。从 iTerm 干净分离和后续附加遵循 iTerm 中设置的大小。

于 2021-12-28T22:33:15.207 回答
0

可能是一个奇怪的边缘情况,但对我来说,唯一解决它的是不最大化窗口,然后再次最大化它。

于 2022-03-04T17:31:04.067 回答