私は開発のためにtmuxを使用しており、ウィンドウで実行されているタスクと独自のウィンドウで実行される他のタスクがあります。プロジェクトディレクトリのデフォルト名がtmuxセッション名であるというルールを設定しました。
export SESSION_NAME="my-project-name"
tmux kill-session -t "$SESSION_NAME"
tmux new-session -s "$SESSION_NAME" \
"api.start --monitored" \; \
split-window "ui.start --monitored" \; \
select-layout tiled \; \
set-option -w remain-on-exit on \; \
set-option -w mouse on \; \
set-option -g mouse on \; \
bind-key -n C-c kill-session -t "$SESSION_NAME"
同じルールで別のプロジェクトを開始する場合を除いて、すべてがうまくいくようです。最初のセッションでCtrl + cを押すと、SESSION_NAMEは私が望むものではなく、最新のtmux生成セッションの1つだと思います。
ベストアンサー1
公開されたコードスニペットでは、$SESSION_NAME
シェルは各図形を拡張し、各図形は拡張tmux
値をコマンドライン引数として使用します。
(そうではなく、$SESSION_NAME
後でtmux内またはtmux内のシェル内で拡張したい場合でも、export SESSION_NAME="my-project-name"
おそらく無駄です。tmux
環境を構築する方法。このupdate-environment
オプションまたはnew-session -e …
コマンドが役に立ちます。 )
これは次の実行$SESSION_NAME
に含まれます。bind-key -n C-c kill-session -t "$SESSION_NAME"
tmux
bind-key -n C-c kill-session -t my-project-name
その後、他のプロジェクトでは、tmuxコマンドは次のようになります。
bind-key -n C-c kill-session -t different-name
重要なことは、bind-key
単一のセッション自体に限定されないことです。bind-key -n C-c …
tmuxサーバー全体の+動作を変更します。あなたの場合、最後のタスクは前のタスクを上書きし、すべてのセッションで+を上書きします。Ctrlcbind-key
Ctrlckill-session -t different-name
セッションごとにkey-table
プライマリキータブを個別に設定するだけでなく、そのオプションを使用してプライマリキータブを別のものに設定することもできます。root
それぞれの新しいキータブでC-c
以下を設定できます。考えるたぶん可能かもしれません。
私があなたならもっと簡単なことをします。私はそうします:
tmux bind-key -n C-c kill-session
kill-session
-t
目標なし現在のセッションなので、このバインディングは目的のタスクを実行するか、別のセッションを実行する必要がありmy-project-name
ますdifferent-name
。
正直に言うと、「他の集まり」は私にとってあまりにも多くです。私はCtrl+c私についてのすべてを殺したくありません。汎用セッション。私はこの問題を解決します:
これを無視して
C-c
別のキーストロークを「グローバルSIGINT」として選択し、誤ってそれらの1つを使用してください。または、+を「グローバルSIGINT」としてCtrl使用する必要があるセッションを明示的に「表示」します。c次のように見えます。
tmux new-session -e 'TMUX_GLOBAL_SIGINT=1' \; \ bind-key -n C-c if-shell '[ -n "$TMUX_GLOBAL_SIGINT" ]' kill-session 'send-keys C-c'
TMUX_GLOBAL_SIGINT
これで、環境にnull以外の変数があるすべてのセッションでそのセッションがCtrl終了cします。各セッションでTMUX_GLOBAL_SIGINT
空白またはCtrl+が設定されていない場合は、c通常どおりに機能します。メモ:
tmux set-environment -u TMUX_GLOBAL_SIGINT
開始セッションの場合、設定を使用または変更できますtmux set-environment TMUX_GLOBAL_SIGINT 1
(-t
現在のセッションである必要はありませんが、特定のセッションをターゲットにするために使用されます)。tmuxで始まるシェル(または他のプログラム)はを継承できます
TMUX_GLOBAL_SIGINT
。実行されるとtmux new-session …
(などによって)、tmuxが環境を管理する方法を明示的に読み、理解していなくてupdate-environment
も、新しいセッションも変数を継承できます。-e 'TMUX_GLOBAL_SIGINT=1'
man 1 tmux