使用 ZSH_TMUX_AUTOSTART=true 在 tmux 中启动新会话

使用 ZSH_TMUX_AUTOSTART=true 在 tmux 中启动新会话

我在 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

如果没有-dnew-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-sessionswitch-client)。

* 您将有两个状态栏;输入起来很复杂tmux命令到内部会话;如果你切换内部客户端来查看外部会话(想想:镜厅),它可能会做出奇怪的事情。
† 也许在使用时应该抑制警告-d……

答案2

tmuxinator解决了:

tmuxinator start [project]

它会中断当前tmux会话,直接进入新会话。

相关内容