내가 달성하고 싶은 것:

내가 달성하고 싶은 것:

이 질문은 (내가 아는 한) 이전에 질문된 적이 없지만 tmux를 사용하는 모든 사람에게 도움이 될 것입니다! 또한 github에서 플러그인 등을 검색해 보았지만 아직 성공하지 못했습니다.

내가 달성하고 싶은 것:

  • 같은 이름의 창 사이를 순환합니다.

왜?

6개의 tmux 창이 다음 순서로 배열되어 있고 상태 표시줄이 다음과 유사하다고 가정해 보겠습니다.

[0:zsh][1:vim][2:zsh][3:vim][4:zsh][5:vim]

현재 창 0(zsh)에 있는 경우:

  • 3개의 "zsh" 창(0,2,4) 사이를 순환하고 싶습니다.

현재 창 1(vim)에 있는 경우:

  • 3개의 "vim" 창(1,3,5) 사이를 순환하고 싶습니다.

이렇게 하면 먼저 모든 창의 순서를 바꾸지 않고도 동일한 유형의 창을 반복할 수 있습니다(vim 옆에 vim, zsh 옆에 zsh 등).행복!

나는 성공하지 않고 직접 시도했습니다 :(

답변1

기본적인 솔루션을 만들었습니다.

  1. 다음 스크립트를 다른 이름으로 저장 _tmux-cycle-samename하고 실행 가능하게 만듭니다( chmod +x _tmux-cycle-samename).

    #!/bin/sh
    
    if [ "$1" = "-r" ]; then filter=tac; else filter=cat; fi
    
    name="$(tmux display-message -p '#W' | sed 's|\(.\)|[\\\1]|g')"
    
    tmux select-window -t "$(
       tmux list-windows -F '#{window_active} #{window_id} #W' \
       | grep '^[01] @[0123456789]* '"$name"'$' | "$filter" \
       | awk '
          NR==1 {result=$2}
          { if (seen==1) {result=$2; exit} 
            seen=$1
          }
          END {print result}
       '
    )"
    

    스크립트는 올바른 이름( tmux display-message …)을 검색하고 문자열( sed …)을 준비하므로 나중에 정규식으로 해석될 때 이름이 문자 그대로 일치합니다. 그런 다음 스크립트는 창을 나열하고( tmux list-windows …), 일치하는 창을 선택하고( grep …), 순서를 유지하거나 반전하고( cat또는 tac에 따라 확장하고 $filter) 다음 비활성 창을 찾습니다( awk …). 마지막으로 발견된 창이 선택되었습니다( tmux select-window …).

  2. 다음을 다음 항목에 추가하세요 ~/.tmux.conf.

    bind-key -T prefix > run-shell '/full/path/to/_tmux-cycle-samename'
    bind-key -T prefix < run-shell '/full/path/to/_tmux-cycle-samename -r'
    

    _tmux-cycle-samename이 문제가 해결 되면 PATH전체 경로를 지정할 필요가 없습니다.

  3. 이미 안에 있다면 를 tmux실행하세요 tmux source-file ~/.tmux.conf. tmux다시 시작된 서버는 자동으로 이 파일을 얻습니다.

  4. ( 기본값 은 + ) prefix>에서 솔루션을 테스트 해 보십시오 .prefix<tmuxprefixCtrlb

답변2

마지막으로 방문한 창으로 전환하는 명령이 있습니다. ctrl-b+;

#키(또는 원하는 것)를 바인딩하여 마지막으로 방문한 tmux 창으로 전환할 수 있습니다 . vim에서 마지막 버퍼로 전환하는 #방법과 비슷해서 선택했습니다 .:b#

# go to last pane (like b# in vim)
bind '#' select-pane -l

따라서 tmux 접두사(기본적으로 ctrl-b)를 누른 다음 #.

관련 정보