以下是 中选项的默认设置~/.tmux.conf
:
set -gw window-status-format " #I:#W#{?window_flags,#{window_flags}, } "
我遇到的问题是,当第一个窗口不处于活动状态时,值开头的空格字符不会应用于第一个窗口的名称(在状态栏的窗口列表中),这与所有其他窗口不同,它是独立应用的。因此,每当我切换到第一个窗口(由于随后添加了空格字符)时,窗口列表中就会出现这种移动,我觉得这很分散注意力。这不应该发生。
所以我想要的是,我想设置window-status-format
为:
"#I:#W#{?window_flags,#{window_flags}, } "
ifwindow_index
是0
(即目标第一个窗口名称)。" #I:#W#{?window_flags,#{window_flags}, } "
如果window_index
还有别的什么。
它看起来像这样:
set -gw window-status-format "#{?window_index=0,"#I:#W#{?window_flags,#{window_flags}, } "," #I:#W#{?window_flags,#{window_flags}, } "}"
但这绝对不是正确的 tmux 命令(显然它不起作用),原因有多种:
- 当然,这不是检查是否
window_index
等于的正确语法0
。 - 我们可以在同一个 tmux 配置中有多个条件吗?命令?
那么,我该如何正确地做到这一点呢?
答案1
看起来可以使用特异性来完成此操作,而不是使用多个条件。我所要做的就是将其添加到我的~/.tmux.conf
:
set -gw window-status-format " #I:#W#{?window_flags,#{window_flags}, } "
set -w -t :0 window-status-format "#I:#W#{?window_flags,#{window_flags}, } "
如果还不是很明显的话:
第一个 tmux 命令为所有窗口设置全局值,无论会话如何。 (这也是默认设置,你根本不需要这一行。)
下一个命令指定目标窗口的值(同样,与会话无关)。在我们的例子中,我们是说,如果目标窗口的索引(即
window_index
)是0
,即如果目标窗口也是会话中的第一个窗口,则应用该值。有趣的是,
-t
(target-window) 选项还针对状态栏中相应窗口的名称。如果不是这样,这个解决方案就不是一个。
笔记:
如果您使用不同的基本索引,例如
set -g base-index 1
,以便它从而1
不是开始0
,那么您必须:1
在上面的命令中使用。您需要一个解决方案因为当您创建新会话时您会看到错误,但是当然,您可以像我在那里描述的那样解决它。
答案2
我找到了另一个解决方案:
is_first="#([ $(tmux display-message -p '#I') = $(tmux show-options -gqv base-index) ] && echo true)"
set -gw window-status-format "#{?$is_first,First is active,}"