使用ZSH_TMUX_AUTOSTART = true从tmux内启动新会话


2

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

Answers:


2

没有-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以打印出新会话的名称(这需要tmux 1.8或更高版本)。

然后给出输出(新会话的名称)switch-client

如果你没有TMUX 1.8,你可能要返工了一点(例如使函数采取强制性参数名称的新会话,这样就可以把它传递给双方new-sessionswitch-client)。

*你会有两个状态栏; 向内部会话输入tmux命令很复杂; 如果你切换内部客户端来查看外部会话(想想:镜子大厅),它可能会做一些奇怪的事情。
†使用时可能会禁止警告-d......


嗯,有些东西在这里不起作用。gist.github.com/firedev/204119182d482848bb71
firedev 2014年

@Nick:呃,只有那些gisted命令中的第一个使用该函数。它可能需要一个-sin(即tmux-new -s test),否则你只是启动(并切换到)一个运行命令的窗口的会话test(可能只是立即以非零结果退出)。
克里斯约翰森2014年

我只是试图在终端中运行命令。tmux-new -s test什么都不做。
firedev 2014年

1

tmuxinator 解决了它:

tmuxinator start [project]

它突破了当前的tmux会议直接进入新的会议。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.