tmux 키를 여러 명령에 바인딩


37

여러 서버 매개 변수를 모니터링하기 위해 multipane tmux 창을 시작합니다. Ctrl-S를 사용하면 다른 모니터 명령으로 새 창을 열 수 있습니다.

이제 여러 모니터 가있는 다른 다중 창 을 열려면 Ctrl-Q를 바인딩하고 싶습니다 . 여러 명령에 키를 어떻게 바인딩합니까? 나는 그것들을 연결하려고 노력했다. 그리고 \; -아무것도 도움이되지 않습니다. 아래 ... 대신에 무엇을 사용해야하는지 알려주십시오 .

새 창을 열 때 겹친 백그라운드 명령을 일시 중단 할 수 있습니까?

    tmux new-session "monitor1" \;\
            split-window -v "monitor2" \;\
            select-pane -U \;\
            split-window -v -h -p 60 "monitor3" \;\
            bind-key -n C-s new-window "monitor4" \;\
            bind-key -n C-q "..."

답변:


37

Todd Freed가 옳습니다.이를위한 "올바른"방법은 \;입니다. 일종의. 그러나 걸림이 있습니다.

tmux에 joint를 부여하여 일련의 tmux 명령을 결합 ;합니다. 따라서 tmux가 제공하는 파일에서 다음과 같이 말할 수 있습니다.

new-session "monitor1" ; split-window -v "monitor2"

어떤 이유로 든 당신은 한 줄에 모든 것을 원한다면. 이제, 당신은에 그 한 줄의 복합 문 제공 할 수 있습니다 tmux또한 쉘에서 명령을 하지만, (가) ;너무 이스케이프해야하는 또 다른 인수로 쉘 해석을 tmux. 따라서 쉘에서 위와 동등한 것은

$ tmux new-session "monitor1" \; split-window -v "monitor2"

마찬가지로 tmux bind-key명령은 tmux 명령 인 일련의 인수와 키를 누를 때 실행할 인수를 사용합니다. C-qtmux가 제공하는 파일 내부에서 위의 시퀀스 에 바인딩 하려면 다음과 같이 말하십시오.

bind-key -n C-q new-session "monitor1" \; split-window -v "monitor2"

여기서 우리는 ; tmux에서 탈출하여 tmux가 bind-key명령 의 끝으로 해석하지 않고 bind-key복합 명령을 C-q키 의 바운드 값으로 구성하도록 지시 하는 또 다른 인수 로 사용합니다 .

tmux를 쉘에서 수행하게하려면 어떻게됩니까? 탈출의 많은.

$ tmux bind-key -n C-q new-session "monitor1" \\\; split-window -v "monitor2"

첫째, 우리는 탈출해야 \ 하고; 각에서 쉘이 두 문자를 전달하는 원인 \;에 대한 인수로 tmux. 그러면 ;tmux에서 이스케이프되어 전체 복합 명령문을 바인딩으로 지정 C-q합니다.


이제, 이와 같이 복잡한 tmux 설정을 반복해서 사용하는 경우 tmux 파일을 만들어 보관하는 것이 좋습니다.

# In split-windows.tmux:
new-session "monitor1"
split-window -v "monitor2"
bind-key -n C-s new-window "monitor4"
# ...etc...

그리고:

$ tmux source split-windows.tmux  # (or even make an alias for this)

그렇게 유지하는 것이 훨씬 쉬울 것입니다.


3
명령 줄에서 여러 명령에 대한 바인딩 키를보기가 끔찍하게하기 위해 문자열 이스케이프를 수행 할 수도 있습니다 \;.$ tmux bind-key -n C-q new-session "monitor1" '\;' split-window -v "monitor2"
Tim Heap

12

따라서 진정한 대답은 백 슬래시와 세미콜론으로 명령을 연결하는 것입니다.

bind-key C send-keys foo \; send-keys bar

tmux.conf에 넣거나 tmux ":"프롬프트에서 실행합니다.


이것은 훌륭하고 중첩 된 tmux 세션을 사용하고 중첩 된 tmux 창을 탐색하는 데 효과적이었습니다.
Paul

1
쉘 명령 행 에서는 작동 하지 않습니다 . 즉, TMux bind-key C send-keys foo \; send-keys bar "는"foo "를"C "에 바인딩하는 효과가 있지만"bar "를 즉시 인쇄합니다.
Lqueryvg

예, tmux 내에서 실행합니다. 명확히하기 위해 업데이트되었습니다.
Todd는

좋은! 이것은 완전히 작동합니다 ... 많은 gracias!
Brad Parks

참고 : 작은 따옴표 안에는 이스케이프 할 필요가 없습니다
Elig

2

작은 해결 방법으로이 작업을 수행 할 수 있습니다. 스크립트를 실행할 것을 제안하는 답변과 유사하게 (대소 문자를 잘 처리 함) "run-shell"을 사용하고 tmux 자체를 쉘 명령으로 호출하여 더 일반적으로 수행 할 수 있습니다.

bind-key z run-shell "tmux send-keys "xyz" ; tmux clear-history; clear" 

이것은 'xyz'키, tmux 'clear-history'명령을 보낸 다음 'clear'쉘 내장을 호출합니다.

전체 문자열은 단지 다중 쉘 명령 시퀀스입니다.


1

.tmux.conf파일 의 키 바인딩에 다음과 같은 것을 추가 할 수 있습니다 .

bind q send-keys "/home/jackhab/bin/tmux-new-session.sh" \; send-keys "Enter"

그리고 tmux-new-session.sh당신은 할 수 있습니다 :

#! /usr/bin/env bash
tmux new-session "monitor1"
tmux split-window -v "monitor2"
tmux select-pane -U
tmux split-window -v -h -p 60 "monitor3"
...
exit

1

여기에 표시된 모든 것이 작동하지 않습니다.

bind q send-keys "command1" \; send-keys "command2"

command2를 즉시 실행하고 q는 send-keys "command1"에만 바인드합니다.

해결책은 다음과 같습니다.

bind R source-file "$HOME/.tmux/reload.tmux"

~ / .tmux / reload.tmux 파일에서 다음과 같은 여러 명령을 넣습니다.

source-file "$HOME/.tmux.conf" 
display-message "Configuration reloaded."

1
아 잠깐, Peeja가 말한 것을 사용하십시오 (\\\;) :-)
lzap
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.