tmux 不会随终端窗口调整大小

Wil*_*den 11 terminal tmux

当我调整包含 tmux 会话的终端窗口的大小时,tmux 不会检测到此更改,但会继续在旧窗口边界内正常运行。 tmux ls在我附加之前没有显示其他附加的客户端:

$ tmux ls
admin: 1 windows (created Mon Apr 27 15:12:58 2015) [272x75]
apt-runs: 3 windows (created Mon Apr 27 15:17:50 2015) [272x75]
lal-dev: 4 windows (created Tue Jun  9 12:24:25 2015) [238x73]
Run Code Online (Sandbox Code Playgroud)

这只发生在特定主机(运行 tmux 1.9a)上,分离/重新连接可以解决问题(直到窗口再次调整大小)。这可能是什么原因造成的?

调整大小前: 前

调整大小后: 在此处输入图片说明

rub*_*o77 16

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

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

或短

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

或者,您可以在附加到会话之前将任何其他客户端移动到不同的会话:https : //stackoverflow.com/a/7819465/1069083

  • 正如我在问题中所说,没有其他客户。与这种情况不同的是,当有多个终端尺寸不同的客户端时,状态栏保留在屏幕底部,未使用的区域用点填充。我从未解决过这个问题,但我不再在发生该问题的系统上工作。 (2认同)

sat*_*ter 7

我不精通终端术语,但我通过执行以下步骤设法摆脱了这个错误:

  1. Ctrl+退出会话b d(别担心,您可以完整地返回会话)

  2. 检查您的控制台应用程序是否正在运行xterm。如果echo $TERM返回,xterm则此过程可能对您有用。

  3. 输入resize您的终端。

  4. 通过重新调用返回到您的会话tmux。如您所见,您的所有会话都在运行,就像您从未离开 tmux 一样。

Tmux 将其终端大小与您的xterm“大小”变量联系起来。如果您碰巧将$TERM设置为screen,那么我无法帮助您,因为我不知道该 TERM 会话的命令是什么。


小智 7

当 tmux 的window-size选项设置为manual. 要取消设置该选项,您可以按 Ctrl+B 并键入

:set-option -u window-size
Run Code Online (Sandbox Code Playgroud)

window-size 是每个窗口的选项,因此您必须为会话中的每个大小错误的窗口运行。

从 tmux 的手册页:

窗口大小 largest| smallest| manual| latest: 配置 tmux 如何确定窗口大小。如果设置为largest,则使用最大的附加会话的大小;if smallest,最小的大小。如果manual,则从默认大小选项设置新窗口的大小,并自动调整窗口大小。使用latest,使用最近活动的客户端的大小。另请参阅resize-window命令和aggressive-resize选项。

默认值latest从 tmux 3.2(2020 年 2 月 3 日发布)开始,或者smallestlatest不存在的早期版本中。然而,值得注意的是,将 iTerm2 与 tmux控制模式一起使用会在manual不询问您的情况将其设置为,即使在分离 iTerm2 并在非控制模式下与不同的客户端连接后,该设置也会保留。其他支持控制模式的终端仿真器的行为方式可能相同,但我只测试了 iTerm2。

  • 这应该是答案。取消设置“窗口大小”选项对我有用。这是有道理的;如果“tmux”进入不会调整终端窗口大小的状态,并且没有附加其他会话,这是因为它的“window-size”设置为“manual”。 (2认同)