【问题标题】:Is there any way to redraw tmux window when switching smaller monitor to bigger one?将较小的监视器切换到较大的监视器时,有什么方法可以重绘 tmux 窗口?
【发布时间】:2011-12-10 12:08:49
【问题描述】:

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

% tmux -V
tmux 1.5

【问题讨论】:

  • 我想知道如何在不分离任何会话的情况下重绘所有会话。
  • 每个人都只是分离...你找到方法了吗?
  • 是的,我仍然很想知道这个问题的答案:“有什么方法可以重绘和清理窗口吗?”

标签: tmux


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        这仍然是搜索时的顶部帖子,但它不再有效。 Best answer is here,但 TLDR 是

        <c-b>:resize-window -A

        【讨论】:

        • 谢谢,与我尝试过的所有其他答案不同,这对我有用。
        • 如果您希望它始终使用最大客户端的大小,只需 set -g window-size largest(如果您希望最小,则为 smallest)。 resize-window -A 会将其设置为该窗口的 manual,这意味着您每次调整终端大小时都需要再次运行它。
        • 它会在我的 tmux 2.6 计算机中导致“未知命令”消息。
        • 这正是我想要的。谢谢。
        【解决方案5】:

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

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

        【讨论】:

        • 澄清。它是大写 D。小 'd' 分离客户。
        • CTRL-B 如果这是您的前缀。自从我从屏幕切换以来,我的一直是CTRL-A
        • 实际上,您需要从同一个会话组中的所有较小的会话中分离出来。但是 CTRL-B + SHIFT-D 不显示每个会话属于哪个组。我更喜欢运行 tmux list-sessions 显示会话名称、大小和组信息,然后运行 ​​tmux kill-session -t <session_name> 来终止同一组的会话。
        【解决方案6】:

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

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

        简单地说:

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

        【讨论】:

        • 这与 @datakid 的 stackoverflow.com/a/61764869/9238801 tmux resize-window -A 答案(重新附加后)相结合,对我来说可以在几层 ssh 上运行交互式计算节点
        【解决方案7】:

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

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

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

        【讨论】:

        • 修复了 macOS 终端中 tmux 状态栏的奇怪位置。当我打开终端选项卡时,它会弄乱 tmux 状态栏的位置。通过cmd-+- 进行缩放可以修复它。
        【解决方案8】:

        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,然后将任何其他使该窗口处于活动状态的会话切换到其他窗口),但它是在一般情况下更难编写脚本(并且与“退出”不同,因为您希望取消链接窗口或终止会话,而不是仅仅从会话中分离)。

        【讨论】:

        • 请注意,您可以使用$(tmux display-message -p '#S') 获取当前会话,请参阅:superuser.com/questions/410017/…
        • 这个答案得到了细节和知识库的支持。但请参阅 Shi B. 的回答 Ctrl-b + D 以方便使用(和记忆)。
        • "tmux detach -a" 为我工作; “tmux attach -d”没有。
        • (1) set-option... set-remain-on-exit on 上的新 tmux 错误。见tmux #787。现在,使用:tmux set-hook -t "$tmp" window-linked 'set remain-on-exit on
        • (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。跨度>
        【解决方案9】:

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

        tmux detach -a
        

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

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

        alias takeover="tmux detach -a"
        

        工作流程:您可以正常连接到您的会话,如果您对另一个会话迫使您缩小 tmux 窗口大小感到困扰,您可以简单地调用takeover

        【讨论】:

        • 非常感谢!工作。如果您在活动的 tmux 会话中执行此操作,只需按 CTRL+B(或任何您的自定义 tmux 命令),然后按:detach -a
        • 或者只是在 Tmux 内的 shell 命令行上执行 tmux detach -a
        【解决方案10】:
        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
        

        杀死另一个。

        【讨论】:

        • 似乎是对标题问题的有效答案,尽管有更好的答案。我不明白为什么它被否决了。
        猜你喜欢
        • 2012-05-28
        • 2012-04-23
        • 1970-01-01
        • 2017-06-19
        • 1970-01-01
        • 2015-11-09
        • 1970-01-01
        • 2021-07-23
        • 1970-01-01
        相关资源
        最近更新 更多