tmuxで別のセッションを選択し、現在のセッションを終了して現在のセッションを置き換える方法は?

tmuxで別のセッションを選択し、現在のセッションを終了して現在のセッションを置き換える方法は?

choose-session()に似たTmuxコマンドが必要ですPREFIX sが、別のセッションを選択すると現在のセッションが終了します。

理想的には、このコマンドは現在のセッションが別の場所に接続されている場合は切り離しますが、これが唯一の接続である場合はセッションを終了します。これは次のようになります。tmux display -p '#{session_many_attached}'


一つあるエマルジョンしかし、かなり古く、反対の方法(クエリ、終了、結合)で質問をします。

答え1

このバインディングはPREFIX C-sセッションを選択し、そのセッションに切り替えてから前のセッションを終了します。

bind-key C-s \
  if-shell "(($(tmux display -p '#{session_many_attached}') > 0))" \
    choose-session \
    "run-shell \"tmux choose-session \\\"switch-client -t '%%'; kill-session -t '$(tmux display -p '#S')'\\\"\""

私はシェル式を使用しました(シェルを使わないもう一つの答えが良いでしょう!)。まず、Tmuxを使用して、if-shell接続されているクライアントが複数あるかどうかを確認します。その場合、標準choose-sessionコマンドを呼び出します。

ただし、これがセッションに接続された唯一のクライアントである場合は、カスタムコマンドを渡すがそれに渡すコマンドラインを作成できるように、シェルでchoose-sessionこれを行います。run-shellchoose-session

コマンドラインは、次の2つのコマンドで構成されています。

  • switch-client -t '%%'これはchoose-sessionデフォルトで使用されます(man tmux説明は参考文献を参照)。
  • kill-session -t '$(tmux display -p '#S')'まず、サブシェルを使用して名前を取得します現在のセッション(まだ削除されていません)をパラメータとしてに渡しますkill-session

最後のコマンドが機能するには多くのエスケープが必要です。これには、if-shell1つのシェルコマンドと2つのtmuxコマンドという3つのパラメータが必要です。スペースが含まれている場合は、引用符で囲む必要があります。したがって、3番目のステートメントrun-shell...は非常に悪いです!

(tmux 2.3)

関連情報