tmux内の共有セッションで2つのtmuxクライアントを切断するためのよりエレガントな方法はありますか?

tmux内の共有セッションで2つのtmuxクライアントを切断するためのよりエレガントな方法はありますか?

これはほとんどコードレビュー質問ですが、とても*nixyです。コードよりも構成に関する方が多いです。tmux移行後、screen長年にわたって私が望む方法で作業できないようにするいくつかのトリッキーな問題に遭遇しました。 tmuxセッション内で実行するようにシェルを設定したので、最終的にこの問題を解決する時間だと判断しました。

デフォルトでは、2つのtmuxクライアントを同じセッションに接続すると、一緒にロックされます。ウィンドウの1つを切り替えると、両方のウィンドウが同時に切り替えられます。これはデフォルトの動作が共有ウィンドウセットですが、クライアント自体は独立した画面とは異なります。

私が望むのは、2つのtmuxクライアントを同じセッションにバインド解除する方法です。 tmuxの外にあり、新しいクライアントを起動すると、これを簡単に実行できます。新しいセッションを開始するには、親セッションを参照するだけです。

tmux new-session -t original_session -s new_session

しかし、これを試してみてください後ろにクライアントに存在し、セッションを共有している他のクライアントとの接続を解除したい場合、状況はより複雑になります。何十もの方法を試しましたが、効果的な方法が見つかりませんでした。私が得た最も近いのは、bind <key> prompt-command ...古いセッション名と新しいセッション名のプロンプトを使用することです。何らかの理由で、tmuxは#{session_name}aまたはパラメータ内で変数を拡張しません。new-sessionprompt-commandこれは他の多くのコマンドの引数で動作します(たとえば、run以下で使用しています)、この拡張がないと、この特定の操作は突然複雑になります。値を手動で入力しても、うまく機能します。

今日はついに出勤しました。しかし、結果は私が望んでいたよりも悪かった。ほとんどのタスクを実行するにはシェル機能が必要です。外部スクリプトを使用せずに構成ファイルに含めるために(ドットファイルの移植性のために)ハッキングを使用しました。最初の2つの列を削除すると、この構成は実際にはシェルスクリプトとして実行できます。すべてを関数にカプセル化すると、すべてのキーバインディングで必要なスクリプト部分のみを呼び出すことができます。シェルスクリプトビットは設定のコメントであり、シェルスクリプトでは設定ビットはこのドキュメントから削除されます。

今日のソリューションこのように出ました(私の完全な.tmux.confファイル):

# : << ENDOFCONF

# Clear the default binding
unbind C-c
# Pass the name of the current session to a function to clone it
bind C-c run "cut -c3- ~/.tmux.conf | sh -s clone #S"

# ENDOFCONF
# clone () {
#   orig=${1%-*}
#   copy="$orig-$(($( tmux list-sessions -F '#S' | sed -nE "/^${orig}-[0-9]+$/{s/[^0-9]//g;p}" | tail -n1 )+1))"
#   TMUX= tmux new-session -d -t $orig -s $copy
#   tmux switch-client -t $copy
#   tmux set -q -t $copy destroy-unattached on
# }
# $@

これが機能することに注意してください。実行中のtmuxクライアントで++Ctrl新しいセッションを作成し、現在のセッション名に番号を追加し、現在のセッションをウィンドウのターゲットとして使用し、そのセッションに切り替えます。B CtrlC

1つの小声だけを除いては大丈夫です。必要以上に複雑なものを簡単にしました。これを達成するより簡単な方法はありますか?

ベストアンサー1

これが私がしたことです:

alias ta='export NEW_SESSION=\$(uuidgen) ; tmux new-session -t 0 -s \$NEW_SESSION ; tmux kill-session -t \$NEW_SESSION'

これは、「0」(指定されていない場合は最初のセッションの名前)と呼ばれるセッションから新しいセッションを作成し、一意のランダムな名前(uuidgenを使用)を指定してから分離時に終了することです。

私はzshを使用しています。 「ta」は「tmux Attach」の略です。

おすすめ記事