我想要一个类似于choose-session
( PREFIX s
)的 Tmux 命令,但如果选择另一个会终止当前会话。
理想情况下,如果当前会话附加在其他地方,则该命令将分离当前会话,但如果这是唯一的附件,则将其终止。这可以通过tmux display -p '#{session_many_attached}'
有一个类似的问题,但它已经很老了,并且会反过来问这个问题(查询、杀死、连接)。
这绑定PREFIX C-s
到选择一个会话,切换到它,然后终止前一个会话:
bind-key C-s \
if-shell "(($(tmux display -p '#{session_many_attached}') > 0))" \
choose-session \
"run-shell \"tmux choose-session \\\"switch-client -t '%%'; kill-session -t '$(tmux display -p '#S')'\\\"\""
Run Code Online (Sandbox Code Playgroud)
我使用过 shell 表达式(另一个不使用 shell 的答案会很棒!)。首先我使用 Tmuxif-shell
来决定是否有多个附加的客户端。如果有,那么我只调用标准choose-session
命令。
但是,如果这是连接到会议的唯一客户端,我通过一个自定义的命令choose-session
,但我做的外壳(带run-shell
),这样我可以建立命令行传递choose-session
。
该命令行由两个命令构成:
switch-client -t '%%'
这是choose-session
默认情况下使用的(man tmux
有关解释,请参阅)。kill-session -t '$(tmux display -p '#S')'
首先使用一个子shell来获取当前会话的名称(它还没有被销毁)并将其作为参数传递给kill-session
.最后一个命令需要大量的转义才能使其工作。将if-shell
有三个参数:一个shell命令和两个TMUX命令。如果它们包含空格,则需要引用它们。因此,第三个论点run-shell...
是相当讨厌的!
(tmux 2.3)