当我退出 tmux 会话中的最后一个终端时,它会自动关闭 tmux 并返回到父终端。是否可以让 tmux 切换到另一个已经运行的会话而不是关闭?
我为我处理的每一项任务创建一个新的命名会话,例如 TRxxx、电子邮件、scratch 等,当我完成其中一项任务时,我通过在每个终端中运行 exit 来关闭所有终端。当您在会话的最后一个终端中运行 exit 时,tmux 会将您返回到父终端,但是是否可以让它只切换到其他打开的会话之一,这样我就不必重新连接?
这个问题类似于“终止一个 tmux 会话并选择另一个 tmux 会话“但我想通过使用退出而不是关闭窗口来以一种好的方式关闭我的终端。
答案1
我将此添加到我的~/.tmux.conf
:
set-option -g detach-on-destroy off
当我销毁会话中的最后一个 shell 时,它会切换到另一个活动会话。所有会话关闭后,tmux
退出。
答案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; \
"
当(且仅当)当前会话仅拥有一个未运行任何其他命令的 shell 时,按[PREFIX]
Ctrl+即可退出当前会话。D如果可能的话,它将切换到另一个会话。我使用 bash shell,因此您可能需要将其更改为您正在使用的外壳。
ps:以防万一,我目前正在使用 tmux 1.9a。
答案3
将这些行添加到您的.bashrc
并尝试:
if which tmux 2>&1 >/dev/null
then
# start a new session if not exist
test -z ${TMUX} && tmux
# when quitting tmux, try to attach to other session
while test -z ${TMUX}; do
tmux attach || break
done
fi