将较小的显示器切换到较大的显示器时,有没有办法重新绘制tmux窗口?

Nob*_*obu 378 tmux

假设您使用Terminal.app通过ssh连接到远程服务器.当您使用较大的分辨率监视器"tmux attach"时,您之前启动了tmux,它会在控制台周围绘制点.它不适合新的窗口大小.有没有办法重绘和清理窗口?CTRL+ LCTRL- B+ R没有帮助.我找不到适合男人的命令.

% tmux -V
tmux 1.5
Run Code Online (Sandbox Code Playgroud)

Chr*_*sen 543

tmux将窗口的尺寸限制为窗口所连接的所有会话中每个维度的最小值.如果它没有这样做,那么就没有合理的方法来显示所有连接的客户端的整个窗口区域.

最简单的方法是在附加时从会话中分离任何其他客户端:

tmux attach -d
Run Code Online (Sandbox Code Playgroud)

或者,您可以在附加到会话之前将任何其他客户端移动到其他会话:

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
Run Code Online (Sandbox Code Playgroud)

如果较小的客户端切换到会话,屏幕将再次缩小.

还有一个变体,你只需"接管"窗口(将窗口链接到一个新的会话,设置aggressive-resize,并将那个窗口激活的任何其他会话切换到其他窗口),但是在一般情况下编写脚本更难case(与"exit"不同,因为你想要取消链接窗口或终止会话而不是仅仅从会话中分离).

  • 该答案为详细信息和知识库提供了支持。但是请参阅Shi B.的答案Ctrl-b + D以了解其易用性(并牢记)。 (2认同)

Shi*_* B. 438

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

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

  • 澄清.它是资本D.小'd'分离客户. (5认同)
  • `CTRL-B` 如果这是你的前缀。自从我从屏幕切换以来,我的一直是 [`CTRL-A`](https://github.com/blaskovicz/dotfiles/blob/master/tmux.conf#L23)。 (3认同)

gbi*_*bin 173

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

tmux detach -a
Run Code Online (Sandbox Code Playgroud)

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

您可以在.[bash | zsh] rc中将其别名

alias takeover="tmux detach -a"
Run Code Online (Sandbox Code Playgroud)

工作流程:您可以正常连接到您的会话,如果您被另一个强制降低您的tmux窗口大小的会话所困扰,您只需拨打电话即可takeover.

  • 非常感谢!工作.如果你在一个活动的tmux会话中这样做,只需按CTRL + B(或任何你的自定义tmux命令)然后`:detach -a` (13认同)

Pat*_*olt 26

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


dat*_*kid 21

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

<c-b>:resize-window -A

  • 如果您希望它始终使用最大客户端的大小,只需“set -g window-sizelargest”(如果您想要最小的客户端,则只需使用“smallest”)。“resize-window -A” 会将其设置为该窗口的“手动”,这意味着每次调整终端大小时都需要再次运行它。 (4认同)
  • 谢谢,这对我来说很有效,与我尝试过的其他答案不同。 (2认同)
  • 它会在我的 tmux 2.6 计算机中产生“未知命令”消息。 (2认同)
  • 这正是我一直在寻找的。谢谢。 (2认同)
  • 如果您使用 iTerm2 的 tmux 控制模式,它会默默地将窗口大小设置为“手动”。使用 `:set-option -u window-size` 重置它,请参阅 https://unix.stackexchange.com/a/606282/9850 (2认同)

小智 8

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

为了解决这个问题,我遵循了这里的答案(我没有使用 xterm)。

其中简单地说:

  1. 从 tmux 会话中分离
  2. 运行resizelinux命令
  3. 重新附加到 tmux 会话