当切换小显示器到大显示器时,是否有办法重绘tmux窗口?

我在一个较小的终端上启动了一个tmux会话。当我" attachment "对于分辨率较大的监视器上的同一会话,它在控制台周围绘制圆点。它不适合新的窗口大小。有没有办法重画并擦干净窗户?CTRL+lCTRL-B + R没有帮助。

185222 次浏览

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上有一个更简单的解决方案(在1.9上测试),你现在可以这样做:

tmux detach -a

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

你可以在你的。[bash|zsh]rc中使用别名

alias takeover="tmux detach -a"

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

你总是可以按CTRL-B + 转变-D来选择你想从会话中分离的客户端。

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

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

杀了另一个。

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

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

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

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

为了修复它,我遵循答案在这里(我没有使用xterm)。

简单地说:

  1. 从tmux会话分离
  2. 执行resize linux命令
  3. 重新连接到tmux会话

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

<c-b>:resize-window -A

我使用Ctrl-b + ,这使得它为每个窗格闪数,重绘他们的方式。

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

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

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

可能是一个奇怪的边缘情况,但对我来说,唯一能解决这个问题的就是取消窗口最大化,然后再最大化。