web-dev-qa-db-ja.com

ZSH_TMUX_AUTOSTART = trueを使用してtmux内から新しいセッションを開始します

Oh-my-zshでZSH_TMUX_AUTOSTART=trueを使用してtmuxプラグインを有効にしました。これで、ターミナルを開くたびにセッションに接続されます。その部分は本当にいいです。

問題は、新しいセッションを開始してシェルにアクセスできないことです。

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

2
firedev

tmuxinatorはそれを解決しました:

tmuxinator start [project]

そして、現在のtmuxセッションを直接新しいセッションに突破します。

1
firedev

-dがないと、new-sessionは自動的に新しいセッションにアタッチされます(ネストされたセッションはおそらく必要ありません)*、したがって警告)。おそらくやりたいことは、新しい「切り離された」セッションを作成してから、現在のクライアントをその新しいセッションに切り替えることです。 new-sessionにこのユースケースを処理するオプションがあるとは思いませんが、シェルスクリプトを少し使用するだけでかなり簡単に実行できます。

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-sessionとの両方に渡すことができるようにします。 switch-client)。

* 2つのステータスバーがあります。内部セッションにtmuxコマンドを入力するのは複雑です。内側のクライアントを切り替えて外側のセッションを表示すると、奇妙なことが起こる可能性があります(鏡の間など)。
-d…を使用する場合は、警告を抑制すべきかもしれません。

2
Chris Johnsen