![如何自定义 tmux“最后一个窗口标记”?](https://linux22.com/image/1605008/%E5%A6%82%E4%BD%95%E8%87%AA%E5%AE%9A%E4%B9%89%20tmux%E2%80%9C%E6%9C%80%E5%90%8E%E4%B8%80%E4%B8%AA%E7%AA%97%E5%8F%A3%E6%A0%87%E8%AE%B0%E2%80%9D%EF%BC%9F.png)
默认情况下,Tmux-
在窗口标题后显示以表示上次访问的窗口。有没有办法自定义此标记并将其设置为自定义符号?谢谢,
答案1
man 1 tmux
说:
默认情况下,窗口列表按升序显示当前会话中存在的窗口的索引、名称和(如果有)标志。可以使用
window-status-format
和window-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 命令输出的第一行
#()
。
这意味着你可以使用tr
或sed
将其更改-
为其他内容。你可能会对此感到震惊:
构建格式时,
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"