別のtmuxセッション内でtmuxセッションを開くときにコマンドを送信する方法は?


136

典型的な状況は次のとおりです。

$ tmux
  [0] $ ssh example.com
      $ tmux attach
        [0] $ 

tmuxセッションを開いてから、サーバーにSSHで接続し、既存のtmuxセッションに接続します。この時点で、1つのtmuxセッションが別のセッション内にあります。内部のtmuxセッションにコマンドを送信するにはどうすればよいですか?

注:両方のtmuxセッションのキーバインディングは同じです。


4
プログラミングの質問ではありません。superuser.comをお試しください。幸運を。
シェルター、2011

1
私は質問を移動することを嬉しく思いますが、コンテキストではtmux内のvimを使用してコードを作成します。もちろん、この問題が発生する他のサーバーにsshで接続する必要があります。
クリス、

回答:


207

このsend-prefixコマンドを使用して、アクティブなペイン(実行中のプロセス)にプレフィックスキーストロークを送信できます。デフォルトでは、プレフィックスはCbであり、Cbはバインドされていますsend-prefix(2回押すと、アクティブなペインに1つのCbが送信されます)。これは、内部tmuxのバインディングにアクセスするために必要なものです。インスタンスのです。

最初のCbは、プレフィックスキーとして「外部」のtmuxインスタンスによってキャプチャされます。2つ目は、「外部」のtmuxインスタンスによってキャプチャされ、そのCbバインディングをトリガーします(send-prefix)。これにより、Cbが外部インスタンスのアクティブなペインに送信されます。このペインで実行されているプロセスは(最終的にはsshインスタンスを介して)「内部」のtmuxインスタンスです。プレフィックスキーとしてCbをキャプチャします。これで、次のキーストロークが外側のtmuxインスタンスを介して渡され、内側のインスタンスによってキャプチャされてバインディングがトリガーされます。

tmuxの第2レベルのインスタンスでcバインディング(new-window)をトリガーするには、Cb Cb cと入力します。第3レベルのたとえばtmuxは次のように入力しCbをCbとCbとCbとcを

tmuxの複数のレイヤーを一般的に扱っている場合、各レベルでのこの2倍は煩わしいかもしれません。他のキーを節約できる場合は、接頭辞のないバインディングを作成して、(おそらく)入力を簡単にすることができます。

bind-key -n C-\ send-prefix
bind-key -n C-^ send-prefix \; send-prefix

2番目のレベルのtmuxで 新しいウィンドウを作成:C- \ c
3番目のレベルのtmuxで新しいウィンドウを作成:C- ^ c(またはC- \ C- \ c


低いレベルのtmuxインスタンスに(簡単に)送信したいtmuxコマンドの数が限られている場合は、代わりに使用して、特定のバインディングを作成することができます(おそらく、最上位のtmuxインスタンスのみ)。send-keys

bind-key C-c  send-keys C-b c
bind-key C    send-keys C-b C-b c

第2レベルのtmuxで 新しいウィンドウを作成:Cb Cc
第3レベルのtmuxで新しいウィンドウを作成:Cb C


さらに、私はコメントアウトしなければならなかった私の既存のlast-windowやったときに、それが呼ばれていたとして結合C-a C-aなど、: #bind-key C-a last-window。私の接頭辞はaデフォルトではなくであることに注意してくださいb
クリス

1
bind-key -n C-\ send-prefix動作しません。tmuxが\を認識していません。手紙を使うとうまくいきます。
darksky 2013年

@Darksky:使用しているtmuxのバージョンは?1.7、1.6、1.5で動作します。シェルコマンドからバインディングを作成する場合(つまりtmux bind-key -n 'C-\' send-prefix)、引用符のレベルを追加する必要があります。それ~/.tmux.conf(またはPrefix :コマンドライン)からの動作に問題がある場合は、同様の引用(つまりbind-key -n 'C-\' send-prefix)を試してみてください。
Chris Johnsen 2013年

51

インナーにアクセスするには、コントロールを押しながらBを2回押します。


7

編集:

バインドキーとして使用することはお勧めしません。C-qこれは、デフォルトのコントロールキーコマンドであるためです。

画面のフリーズを解除し、画面表示を継続させます

ここで状況が発生、@ Paschalisが解決策を提供します。

タイプ:二回不運(接頭辞としてCqを持つリモートtmuxのセッション)であることを起こる場合はCltr-q、その後:、およびtmuxはで入力します。send-keys C-q

その下に答えがあります:


簡単にするために、以下の行を ~/.tmux.conf

bind-key -n C-q send-prefix

その後、リモートtmuxのバインドキーとして直接使用できC-qます。


誰かが外側のtmuxでデフォルトのバインダーキーを変更した場合、上記のスニペットを機能させるには、内側のtmuxで同じデフォルトのバインダーキーを使用する必要があります。
Paschalis 2016年

私は私の地元のtmuxの接頭辞を変更しています(Ctrl +に]私の場合)のサーバー上のすべての「内側」tmuxは-ESは、デフォルトの接頭辞のために結合していて
actionless
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.