当退出 tmux 会话中的最后一个终端时,它可以切换到另一个终端吗?

Dav*_*olm 16 tmux

当我退出 tmux 会话中的最后一个终端时,它会自动关闭 tmux 并将我返回到父终端。是否可以让 tmux 切换到另一个已经在运行的会话而不是关闭?

我为我处理的每个任务创建一个新的命名会话,例如 TRxxx、电子邮件、scratch 等,当我完成其中一个任务时,我通过在每个任务中运行 exit 来关闭所有终端。当您在会话的最后一个终端中运行 exit 时,tmux 会将您返回到父终端,但是否有可能让它切换到其他打开的会话之一,这样我就不必重新连接?

这个问题类似于“终止一个 tmux 会话并选择另一个 tmux 会话”,但我想通过使用退出而不是终止窗口来关闭我的终端。

小智 38

我将此添加到我的~/.tmux.conf

set-option -g detach-on-destroy off
Run Code Online (Sandbox Code Playgroud)

当我销毁会话中的最后一个 shell 时,它会切换到另一个活动会话。关闭所有会话后,tmux退出。

  • 正确答案应更新为此 (6认同)
  • 请务必注意,在分离和重新附加到现有会话时,tmux 不会更新该设置。您需要重新启动 tmux 服务器才能生效。 (2认同)

gos*_*pes 2

我得到的最接近的是我编写的 tmux 函数。Ctrl我通常通过点击+退出 shell D,因此我编程为在点击+tmux时退出并切换会话。将以下内容放入您的:[PREFIX] CtrlD.tmux.conf

bind C-d run-shell "                                        \
    if [ #{session_windows} -eq 1 ] &&                      \
       [ #{window_panes}    -eq 1 ] &&                      \
       [ #{pane_current_command}  = 'bash' ]; then          \
        if [ \$(tmux list-sessions | wc -l) -ge 2 ]; then   \
            tmux switch-client -ln;                         \
        fi; tmux kill-session -t \"#S\";                    \
    else                                                    \
        tmux display-message \"Ignoring kill session...\";  \
    fi;                                                     \
    "
Run Code Online (Sandbox Code Playgroud)

当(且仅当)当前会话仅拥有一个未运行任何其他命令的 shell 时,按[PREFIX] Ctrl+即可退出当前会话。D如果可能的话,它将切换到另一个会话。我使用 bash shell,因此您可能需要将其更改为您正在使用的外壳。

ps:以防万一,我目前正在使用 tmux 1.9a。