화면과 같이 tmux의 창 내부 창을 순환하는 방법은 무엇입니까?


41

tmux 창을 창 으로 옮기는 것이 같은 질문 이라고 생각 했지만 그렇지 않습니다.

GNU 화면을 정기적으로 사용하면서 tmux도 동일한 작업을 수행하려고합니다. 내가 정기적으로하는 일 중 하나는 vim에서 열린 일부 코드와 하나의 코드가 열려있는 두 개의 다른 창이 열려 있고 코드를 테스트하기 위해 두 개의 터미널 창이 열려 있고 때로는 다른 여러 가지를위한 하나 또는 두 개의 창이 있습니다. 화면을 세로로 나누면 종종 상단 창에 vim 창이 있고 하단 창에 다른 창 중 하나가 나타납니다.

그때 사용되는 주요 명령은 Ctrla, Tab창유리 사이에서 회전하는 Ctrla, n구획 내에서 창 사이 회전합니다. 예를 들어, 상단 창에 vim이 있으면 하단 창으로 전환 한 다음 다른 터미널을 통해 회전하면서 필요한 작업을 수행합니다. 화면은 계속 분할되어 있습니다.

문제는 내가 화면의 비교 기능을 찾을 수 있습니다 Ctrla, nTMUX에 있습니다. 창 전환은 창 안에서 작동하지 않는 것처럼 보이지만 완전히 점프합니다. 화면이 분할 된 경우 두 가지 옵션 만 분할되지 않은 일부 창으로 이동 한 다음 분할하거나 분할 창의 하위 분할을 수행하는 것 같습니다. 내가 찾던 것도 아닙니다.

제안 (스크린 만 사용하는 것 외에)?


당신의 용어는 약간 혼란입니다. 에서 tmux창을 여러 창으로 분할 할 수 있습니다. 키 바인드가있는 창의 창 사이를 순환하려고합니까?
jasonwryan

나는 도구의 명명법을 따르려고 노력했지만 혼란 스럽습니다. 한 창에서 다른 창으로 포커스를 변경하는 방법을 알고 있습니다. 내가 찾으려고하는 것은 레이아웃을 변경하지 않고 특정 창에 표시되는 것을 순환시키는 방법입니다.
FooBar

따라서 한 창에서 다른 창으로 콘텐츠를 옮기려면? 찾고 swap-pane있습니까? screen의 에뮬레이션을 찾고 있다면 Ctrl-a ntmux는 Ctrl-b n입니다.
jasonwryan

답변:


28

tmux화면의 모델이 다르므로 정확한 모델이 없습니다.

에서 화면 용어, 분할은 동시에 여러 창을 표시 할 수 있습니다. next( C-a n) 스플릿의 활성 부분을 통해 창을 회전시킵니다. 이렇게하면 스플릿의 활성 영역을 통해 "숨겨진"창을 회전 할 수 있습니다.

에서 TMUX 용어, 분할은 하나 개 이상의 창으로 창을 나눕니다. 분할 창의 각 부분은 개별 분할 창이며, 분할 창은 절대로 숨겨지지 않으며 (창을 선택한 경우 (표시) 모든 분할 창도) 분할 창은 한 창의 단일 분할에서만 사용할 수 있습니다 (창은 여러 창에있을 수 없으며 같은 창의 여러 분할에있을 수 없습니다). 동일한 방법으로 주변의 창에서 (또는 사이) 이동 창에 명령 있지만은에 있습니다 next화면 .


다음과 같은 바인딩을 사용하여 유사한 효과를 정렬 할 수 있습니다.

bind-key C-n swap-pane -s :+.top \; rotate-window -Ut :+

~/.tmux.conf파일을 파일 에 넣고 싶을 수도 있지만 Prefix :현재 서버 인스턴스에 바인드 한 후 입력하거나 붙여 넣을 수 있습니다 .

바인딩을 사용하려면 "메인 창"을 선택하고 분할 한 다음 "메인 창"바로 다음에 "창 컨테이너"창을 만든 다음 바인딩을 사용하여 "메인 창"의 창을 " 창 컨테이너”창.

설정을 작성하는 방법은 다음과 같습니다.

  • "기본 창"으로 사용할 창을 선택하십시오. Vim 을 시작하십시오 (예 : Vim ) .

  • “기본 창”을 두 개의 창으로 나눕니다.

    Prefix "( :split-window)

    이 창을 테스트 창 (또는 로그 뷰어 등)으로 사용할 수 있습니다.

  • 기본 창 바로 뒤에 새 창 ( "창 컨테이너")을 만듭니다.

    Prefix c( :new-window)

    "메인 윈도우"와 "창 컨테이너"윈도우의 인덱스 사이에 다른 윈도우가 없어야 +합니다 (바운드 명령에 사용 된 윈도우 지정자에서 "다음 높은 번호의 윈도우"를 의미 함).

  • 이 창을 여러 개의 창으로 분할하십시오. 세 개의 창을 통해 회전하려면이 창을 두 개의 창으로 분할하십시오 (세 번째 창은 "기본 창"에있는 창임).

    git 용 쉘 과 데이터베이스 인터페이스를 실행하기위한 쉘이 필요할 수 있습니다. 이“창 컨테이너”창의 별도 창에 각각 넣습니다.

  • "기본 창"으로 다시 전환하십시오. "회전"할 창을 선택하십시오.

    Prefix Up/ Down/ Left/ Right를 사용 하여 창 사이를 이동할 수 있습니다 .

  • 바인딩을 호출하여 현재 창을 "창 컨테이너"창의 첫 번째 창으로 바꾸고 ( "장면 뒤") 창을 "창 컨테이너"창 내에서 회전시킵니다 (다음에 바인딩을 실행할 때 첫 번째 명령). 순서에서 "다음"창으로 바꿉니다.)

    Prefix Control- n(바인딩은 Cn을 사용하지만 원하는대로 변경할 수 있습니다).

  • 창을 뒤로 스크롤하려면 다음을 사용하십시오.

바인드 키 Cp 스왑 패널 -s : +. bottom \; 회전 창 -Dt : +

감사합니다! 훌륭한 설명과 제안 된 바인딩은 적어도 내가 찾고 있던 기능을 복제하는 것으로 보입니다.
FooBar

실례합니다. 어떻게 하나의 창을 전체 크기로 만든 다음 이전 배열로 다시 바꿀 수
있습니까

1
@JamesAndino : tmux 1.8에는 resize-pane -Z창을 전체 크기로 일시적으로 "확대"하는 기본적으로 접두사 + z에 바인딩되어 있습니다. 1.8 이전 버전의 경우, 기본 제공 방법이 없었습니다. 다른 사람들은 다른 내장 명령으로 스크립팅 된 솔루션을 만들었습니다 (예 : tmux에서 창을“최대화”하는 SU 질문에 대한 답변 중 일부 ).
Chris Johnsen

ty, 컴파일 및로드
MageProspero

3
나는 C-b o순환 창을 믿습니다 .
Sam Selikoff

39

내가 당신을 위해 무엇을 찾고있는 것은 생각 Ctrlb+ ( , , , ). 그러면 창 사이를 이동할 수 있습니다.


2
죄송하지만 명확하지 않았습니다. 패널에서 패널로 이동하는 방법을 알아 냈습니다. tmux에서 Ctrl b + o는 화면의 Ctrl a + Tab과 거의 같은 기능을합니다. 내가 찾고있는 것은 화면의 Ctrl a + n과 동등한 기능입니다.
FooBar

@FooBar 방법에 대한 Ctrl-b+{Ctrl-b+}? 그것은 내가 그 기능에 접근 할 수있는 한 가깝습니다. Pane은 화면에서 처리되는 것과 같은 방식으로 tmux에서 수행되지 않습니다.
sparticvs

강조 표시된 창에 초점을 맞추는 데 문제가있는 경우가 종종 있습니다 ^b↑. 그런 다음 강조 표시된 창에 실제로 초점을 맞추면 tmux가 아닌 셸 이 다른 창을 캡처 할 수 있습니까?
ThorSummoner

6

를 사용 bind -r하여 prefix한 번 누른 다음 순서대로 다른 키를 눌러 창을 찾을 수 있습니다. 시간 초과는에 의해 조정될 수 있습니다 repeat-time. 검사man tmux

bind -r Tab select-pane -t :.+

원하는 hjkl경우

bind -r h select-pane -L
bind -r j select-pane -D
bind -r k select-pane -U
bind -r l select-pane -R

2

바로 가기 ALT 또는 SHIFT + 화살표를 사용하여 양극 창 또는 창으로 이동할 수있는 작은 conf가 있습니다. 키 접두사를 사용할 필요가 없습니다.

## NAVIGATION: ############################

# Switch panes 
# Usage: "ALT+arrow keys" (without prefix key)
# from https://gist.github.com/spicycode
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

# Switch windows 
# usage: "SHIFT+arrow" (without prefix key)
bind -n S-Left  previous-window
bind -n S-Right next-window

나보다 더 게으른 경우 마우스로 창 탐색을 허용하는 다음 코드에 관심이있을 수 있습니다. (용도 : 키 접두사 + m으로 설정, M으로 설정)

## MOUSE CONTROL: #########################
set -g mode-mouse off
set -g mouse-resize-pane off
set -g mouse-select-pane off
set -g mouse-select-window off

# Toggle mouse on 
bind m \
    set -g mode-mouse on \;\
    set -g mouse-resize-pane on \;\
    set -g mouse-select-pane on \;\
    set -g mouse-select-window on \;\
    display 'Mouse: ON'

# Toggle mouse off
bind M \
    set -g mode-mouse off \;\
    set -g mouse-resize-pane off \;\
    set -g mouse-select-pane off \;\
    set -g mouse-select-window off \;\
    display 'Mouse: OFF'

이 구성이 작동하면 tmux 1.6에서 1.9까지 작동합니다.


2

이 답변은 두 개의 창을 제공하는데, 두 창 모두 동일한 창 세트를 보유하지만 각 창은 창 사이를 독립적으로 전환 할 수 있습니다.

tmux 접근법은 세 가지 세션 을 사용하는 것입니다 .

  • 위한 세션 바깥 ,
  • 창의 내부 세션 (한 창에서이 창에 첨부 할 수 있음)
  • 내부 세션에 대한 보조 보기 (다른 창)

그렇습니다. 이것은 UNIX 철학 이 화를 냈습니다. 시작하자:

# Create a session to hold the multiple windows
$ tmux new-session -s inner

    <Ctrl-b> c   to create a few windows, run some things

    <Ctrl-b> d   to detach, but leave it running

# Create a session to hold multiple panes (the view)
$ tmux new-session -s outer

    <Ctrl-b> "   to split

# Open the inner session in the current (bottom) pane
$ unset TMUX ; tmux attach -t inner

이제 상단 창으로 전환하여 평소와 같이 Vim을 열 수 있습니다. 내부 세션 (아래쪽 창)에서 창을 순환하려면 Ctrl-b Ctrl-b n및 을 사용해야 p합니다.

따로 : 그것은 조금 다루기 힘들지만 항상 외부 세션의 접두사를 다음과 같이 변경할 수 있습니다 Ctrl-a.

<Ctrl-b> :set-option prefix C-a

그리고 그것은 단지가 될 것입니다 Ctrl-b np내부 창주기 및 Ctrl-a o외부 창주기.

이제 상단 창에서 Vim을 열지 말고 내부 세션에 다시 연결하십시오. vim을 종료하고 이번에는 new-session명령을 사용하십시오 (특히 -tnot -s) :

$ tmux new-session -t inner

짜잔! 이제 상단 및 하단 창에서 창을 순환 할 수 있습니다.

new-session -t두 번째로 사용해야 하는 이유는 단순히 attach -t다시 수행하는 경우 상단 및 하단 창이 동기화되어 항상 동일한 창을 표시하기 때문입니다. 이 분할 창이 다른 분할 창과 독립적으로 창을 이동하도록하기 위해 새 "보기"세션을 작성하지만 창을 보유하는 기존 세션에 백엔드를 직접 연결합니다. 이것을 " 그룹화 된 세션 " 이라고도 합니다 . (그런 식으로, 그 링크는 또한 [un]link-window세션간에 창을 이동 하는 데 사용 하도록 제안 합니다.)

물론 대칭의 경우 tmux new-session -t inner, 대신 하단 창에서도 실행할 수 있습니다 attach. 이 경우 4 개의 tmux 인스턴스 (서버에 대해 하나 이상의 tmux 프로세스)를 실행하게됩니다!


0

다음 코드를 넣으십시오 .tmux.conf.

# cycle prev/next pane
bind -n S-right select-pane -t :.+
bind -n S-left select-pane -t :.-

구성을 다시로드 한 다음 (프리픽스 키없이 직접) Shift+ 를 눌러 창을 시계 방향 으로 순환 하고 Shift+ 를 눌러 반대 방향으로 순환 할 수 있습니다.

Tmux 2.8에서 테스트되었습니다.


구성을 편집하지 않으려 는 경우 prefix+ o는 시계 방향 사이클의 기본 키 바인딩입니다. 때때로이 키 바인딩을 찾았습니다. 그런 다음 명령을 가져 tmux list-keys와서 내 키 바인딩에 사용합니다.

bind-key    -T prefix       o                 select-pane -t :.+
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.