如何自定义 tmux“最后一个窗口标记”?

如何自定义 tmux“最后一个窗口标记”?

默认情况下,Tmux-在窗口标题后显示以表示上次访问的窗口。有没有办法自定义此标记并将其设置为自定义符号?谢谢,

答案1

man 1 tmux说:

默认情况下,窗口列表按升序显示当前会话中存在的窗口的索引、名称和(如果有)标志。可以使用window-status-formatwindow-status-current-format选项进行自定义。标志是附加到窗口名称的以下符号之一:

Symbol    Meaning
*         Denotes the current window.
-         Marks the last window (previously selected).
#         Window is monitored and activity has been detected.
!         A bell has occurred in the window.
~         The window has been silent for the monitor-silence interval.
M         The window contains the marked pane.
Z         The window's active pane is zoomed.

关于set-window-option window-status-format

window-status-format string
设置窗口在状态行窗口列表中显示的格式。[…] 默认值为#I:#W#F

然后,FORMATS您将学到#F“窗口标志”。我没有发现任何能够直接更改与标志相关的符号的痕迹。您仍然可以使用这个:

此外,可以使用 插入 shell 命令输出的第一行#()

这意味着你可以使用trsed将其更改-为其他内容。你可能会对此感到震惊:

构建格式时,tmux不等待#()命令完成;而是使用运行相同命令的先前结果,或者如果该命令之前未运行过,则使用占位符。

在我的测试中,使用tr或进行简单的替换sed似乎可以立即起作用,因此可能无需担心。从内部tmux运行此操作:

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | tr '-' '<')"

或这个:

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | sed 's/-/</')"

我推荐它,tr因为它比 更简单、更小sed,它的性能应该更好(如果重要的话)。但如果你想-用一些多字符*字符串替换,那么这sed就是你的工具。例如:

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | sed 's/-/<--/')"

笔记:

  • %%而不是%因为tmux解析器。
  • tmux set-window-option window-status-format …(不带-g)指定单个窗口的格式;这将优先于该特定窗口的全局格式。
  • 还有window-status-current-format指定窗口为当前窗口时使用的格式。“最后一个窗口”标志显然永远不会应用于当前窗口,但如果您想自定义可能适用的标志,那么您window-status-current-format也需要进行修改。
  • 要添加的行/etc/tmux.conf如下~/.tmux.conf

    set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | tr '-' '<')"
    

*或者更确切地说是多字节。比较

答案2

我不知道这是什么时候添加的,但你可以用 tmux 格式执行正则表达式替换,这使得实现这一点更加简单。摘自手册页:

A prefix of the form ‘s/foo/bar/:’ will substitute ‘foo’ with ‘bar’ throughout.
The first argument may be an extended regular expression and a final argument may be ‘i’ to ignore case, for example:
 ‘s/a(.)/\1x/i:’ would change ‘abABab’ into ‘bxBxbx’.

因此,对于您的用例,您可以window_flags像这样对变量内容执行替换:

set-window-option -g window-status-format "  #{s/-/>>/:window_flags} #I #W"

相关内容