Tmux如何使用choose-tree过滤当前会话窗口并自定义输出格式
问题根因
组合命令失效的核心原因是run-shell执行命令时会提前做一次格式占位符展开:你之前写的-F "#{window_name}"没有做转义,会在run-shell阶段就被替换为触发按键时的活动窗口名称,传给choose-tree时已经是固定字符串,最终所有条目都会显示同一个窗口名。
正确配置
推荐直接绑定choose-tree命令,不需要嵌套run-shell,也不需要额外转义格式符,写法更简洁:
bind-key w choose-tree -Nw -f "#{==:#{session_name},#{session_name}}" -F "#{window_name}"
如果你需要保留run-shell的写法,只要给-F对应的格式占位符也加上##转义,和过滤规则的转义逻辑保持一致即可:
bind-key w run-shell 'tmux choose-tree -Nwf"##{==:##{session_name},#{session_name}}" -F "##{window_name}"'
参数说明
-N:启动choose-tree时默认聚焦窗口列表,而非会话层级-w:初始视图以窗口为维度展示条目-f:指定条目过滤规则,#{==:#{session_name},#{session_name}}会匹配所属会话名等于当前触发按键时所在会话名的条目,实现仅展示当前会话窗口的效果-F:指定单条条目的展示格式,传入#{window_name}时仅显示窗口名称,不会输出主机名、会话名等冗余内容
转义规则提示:当tmux命令嵌套在
run-shell内执行时,所有需要交给内层命令解析的格式变量,都要将前缀#双写为##,避免被外层run-shell提前展开替换为固定值。
内容的提问来源于stack exchange,提问作者OlivierLarue
相关产品推荐
相关产品推荐

