web-dev-qa-db-ja.com

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

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

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

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

注:両方のtmuxセッションには同じキーバインディングがあります。

121
Kris

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

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

cバインディング(new-windowtmuxの第2レベルのインスタンスでは、C-b C-b cと入力します。 tmuxの第3レベルのインスタンスの場合、C-b C-b C-b C-b cと入力します。

tmuxの複数のレイヤーを一般的に処理している場合、各レベルのこの倍増は煩わしい場合があります。他のキーを使用できない場合は、接頭辞のないバインディングを作成して、(おそらく)入力しやすくします。

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

第2レベルで新しいウィンドウを作成tmuxC-\c
第3レベルで新しいウィンドウを作成tmuxC- ^ c(またはC -\ C-\c


限られた数のtmuxコマンドを(簡単に)下位レベルtmuxに送信したい場合インスタンス、代わりにsend-keysいくつかの特定のバインディングを作成します(おそらくトップレベルtmuxインスタンスにのみ):

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

第2レベルで新しいウィンドウを作成tmuxC-b C-c
第3レベルで新しいウィンドウを作成tmuxC-b C

189
Chris Johnsen

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

41
thouliha

編集:

行う[〜#〜] not [〜#〜]使用の推奨C-qはバインドキーとして、デフォルトのコントロールキーコマンドであるため

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

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

2回不運な場合(プレフィックスとしてC-qを使用したリモートtmuxセッション):Cltr-q、次に:、tmuxに入力:send-keys C-q

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


簡単にするために、~/.tmux.conf

bind-key -n C-q send-prefix

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

6
qun