tmux状态栏:使用status-left显示窗口列表,使用middle-section显示其他内容?

4

我正在从GNU Screen转换到tmux,并尝试配置我的tmux状态栏以模仿我在Screen中构建的标题。

我的Screen标题在左侧列出了窗口列表,在主机名和loadavg大致居中,并在右侧显示会话名称:

GNU Screen 0

窗口列表保持左侧,会话名称保持右侧,中间部分保持大致居中,但会向右移动以适应窗口列表(如果其长度较长)... GNU Screen 2 GNU Screen 6

到目前为止,我在tmux中能够做到的最接近的是:

set-window-option -g window-status-format ' #I #W'
set-window-option -g window-status-current-format ' #I #W'
set -g status-justify left
set -g status-left ''
set -g status-right '#h :: #(sysctl vm.loadavg | cut -d " " -f 3-5) #S '

yielding: enter image description here 有没有办法在status-left部分显示窗口列表,并按照自己的方式使用中间部分?


当status-left发生变化时,您是否希望中间部分保持固定? - lord.garbage
@lord.garbage 理论上是可以的,但我主要想知道是否可能将状态栏左侧部分用于窗口列表。 - ivan
啊,那可以做到。抱歉,我刚看到这是“屏幕”输出。我在想为什么你会问自己已经有答案的问题。 :) 不好意思。答案马上就来。 - lord.garbage
1个回答

3

tmux 中正确设置这个有点棘手。但你想要的可以通过以下方式实现:

set -g status-right '#S'
# set-option -g status-left-length 30
set -g status-left '#I #W'
set-option -g status-justify centre


set-window-option -g window-status-current-format '#h :: #(sysctl vm.loadavg | cut -d " " -f 3-5)'
# Disable showing the default window list component.
set-window-option -g window-status-format '#h :: #(sysctl vm.loadavg | cut -d " " -f 3-5)'

这将在每个打开的窗口的中间部分为您提供负载平均值和主机名。如果您只希望此内容仅出现一次,而不是在每个新窗口中都出现,则需要更改最后两行:

`set-window-option -g window-status-current-format '#h :: #(sysctl vm.loadavg | cut -d " " -f 3-5)'`

并且。
 set `set-window-option -g window-status-format ''`

让我稍微解释一下。这些行window-status-current-formatwindow-status-format允许您更改状态行中的window部分。但是,您不需要使用窗口变量,您也可以使用#h或任何其他您想要的内容。 window-status-current-formatwindow-status-format之间的区别在于前者允许您指定在所讨论的窗口是当前窗口时显示的内容,而后者则在其不是当前窗口时显示。我喜欢将两者都设置为相同的值。一旦您理解了这一部分,就可以轻松地格式化状态行的左侧和右侧部分。请注意,当您没有设置window-current-status-formatwindow-status-format时,tmux将显示其默认窗口显示选项。因此,即使您只想摆脱中间部分,因为它会干扰您的其他设置,您也需要将两者都设置为''man tmux也非常有用!

我不知道,对我来说,这显示了每个创建的窗口的中间部分(主机名和负载)的副本。我会继续调试它。 - ivan
是的,正如我所说,您可以通过更改这些变量来将中间部分设置为任何您想要的内容:set-window-option -g window-status-current-format ''set-window-option -g window-status-format '#h :: #(sysctl vm.loadavg | cut -d " " -f 3-5)' - lord.garbage
从你的问题中我所看到的是,这正是你所要求的:“[...]尝试配置我的tmux状态栏来模仿我在Screen中构建的标题。我的Screen标题在左侧有窗口列表,在中间大致居中的是主机名和loadavg,右侧是会话名称[...]有没有办法在状态栏的左侧部分显示窗口列表并按照我想要的方式使用中间部分?” - lord.garbage
最接近屏幕的命令是:set-window-option -g window-status-current-format '#h :: #(sysctl vm.loadavg | cut -d " " -f 3-5)',并设置 set-window-option -g window-status-format '' - lord.garbage
不错!是否仍然可以在状态栏的最左侧显示所有打开的tmux窗口?目前,它只显示活动窗口。 - joelostblom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接