我在 oh-my-zsh 中启用了 tmux 插件,ZSH_TMUX_AUTOSTART=true
现在每次打开终端时我都会连接到一个会话。这部分真的很棒。
问题是 – 现在我无法启动新会话并访问 shell。
有没有办法在不禁用 tmux 插件的情况下开始新会话?
$ tmux new-session -s new
sessions should be nested with care, unset $TMUX to force
我已经在 github 上开了一张票:https://github.com/robbyrussell/oh-my-zsh/issues/3192
答案1
如果没有-d
,new-session
将自动附加到新会话(您可能不想要嵌套会话*,因此会出现警告)。您可能想要做的是创建一个新的“分离”会话,然后将当前客户端切换到该新会话。我认为new-session
没有选项可以处理这种用例,但使用一些 shell 脚本很容易做到:
tmux-new() {
if [[ -n $TMUX ]]; then
tmux switch-client -t "$(TMUX= tmux -S "${TMUX%,*,*}" new-session -dP "$@")"
else
tmux new-session "$@"
fi
}
# example usage:
tmux-new -s new
如果没有 TMUX,则直接运行tmux new …
。否则,
- 取消设置 TMUX 以避免使用指向当前服务器时出现错误† ,
-S
- 添加
-d
以创建一个分离会话,并 - 添加
-P
打印出新会话的名称(这需要tmux1.8 或更高版本)。
然后将输出(新会话的名称)提供给switch-client
。
如果你没有tmux1.8 您可能需要稍微重新设计一下(例如,让函数采用命名新会话的强制参数,以便您可以将其传递给new-session
和switch-client
)。
* 您将有两个状态栏;输入起来很复杂tmux命令到内部会话;如果你切换内部客户端来查看外部会话(想想:镜厅),它可能会做出奇怪的事情。
† 也许在使用时应该抑制警告-d
……
答案2
tmuxinator
解决了:
tmuxinator start [project]
它会中断当前tmux
会话,直接进入新会话。