다른 TMUX 세션에서 TMUX 세션을 열 때 명령을 보내는 방법은 무엇입니까?


136

일반적인 상황은 다음과 같습니다.

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

tmux 세션을 연 다음 서버에 ssh하여 기존 tmux 세션에 연결합니다. 이 시점에서 다른 TMux 세션이 있습니다. 내부 tmux 세션에 명령을 보내려면 어떻게합니까?

참고 : 두 tmux 세션은 동일한 키 바인딩을 갖습니다.


4
프로그래밍 질문이 아닙니다. superuser.com을 시도하십시오 . 행운을 빕니다.
shellter

1
질문을 옮기게되어 기쁩니다.하지만 문맥 상으로 tmux 내부에서 vim을 사용하여 코드를 작성하고 물론이 문제가 발생하는 다른 서버로 종종 ssh를 보내야합니다.
Kris

답변:


207

send-prefix명령을 사용하여 접두사 키 입력을 활성 창으로 (프로세스에서 실행중인) 보낼 수 있습니다. 기본적으로 접두사는 Cb 이고 Cb 는 바인딩되어 send-prefix있으므로 두 번 누르면 단일 Cb 가 활성 분할 창으로 전송됩니다. 이것은 내부 tmux 인스턴스 의 바인딩에 액세스하는 데 필요한 것 입니다.

첫 번째 Cb 는 접두사 키로 "외부" tmux 인스턴스에 의해 캡처됩니다 . 두 번째 인스턴스 는 "외부" tmux 인스턴스에 의해 캡처되고 Cb 바인딩 ( send-prefix)을 트리거합니다 . Cb 를 외부 인스턴스의 활성 창으로 보냅니다 . 이 창에서 실행되는 프로세스는 ( ssh 인스턴스를 통해 ) "내부" tmux 인스턴스입니다. Cb 를 접두사 키로 캡처합니다 . 이제 다음 키 입력이 외부 tmux 인스턴스를 통과하고 내부 키 입력으로 캡처되어 바인딩을 트리거합니다.

tmux 의 두 번째 레벨 인스턴스에서 c 바인딩 ( new-window) 을 트리거하려면 Cb Cb c를 입력하십시오 . tmux 의 세 번째 레벨 인스턴스의 경우 Cb Cb Cb Cb c를 입력하십시오 .

tmux의 여러 계층을 일반적으로 처리하는 경우 각 레벨에 대한이 두 배의 설정은 성 가실 수 있습니다. 다른 키를 절약 할 수 있다면 접두사를 사용하지 않고 바인딩하기 쉽게 만들 수 있습니다.

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.
Kris

1
bind-key -n C-\ send-prefix작동하지 않습니다. 내 tmux가 \를 인식하지 못합니다. 편지를 사용하면 작동합니다.
darksky

@Darksky : 어떤 버전의 tmux 를 사용하고 있습니까? 1.7, 1.6 및 1.5에서 작동합니다. 쉘 명령 (예 :)에서 바인딩을 작성하는 경우 추가 인용 수준을 추가해야합니다 tmux bind-key -n 'C-\' send-prefix. 당신이 ~/.tmux.conf(또는 접두사 :명령 줄) 에서 작동하는 데 문제가 있다면 , 비슷한 인용 (예 :)을 시도 할 수 있습니다 bind-key -n 'C-\' send-prefix.
Chris Johnsen

51

내부에 접근하려면 컨트롤을 잡고 B를 두 번 누르십시오.


7

편집하다:

내가 할 NOT 사용을 권장 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

난 내 로컬 TMUX의 접두사를 수정하고 (Ctrl 키를 +로] 내 경우) 서버에있는 모든 "내부"TMUX-ES는 기본 접두사에 대해 구속력을 가질 수 있도록
actionless
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.