이 질문은 (내가 아는 한) 이전에 질문된 적이 없지만 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
기본적인 솔루션을 만들었습니다.
다음 스크립트를 다른 이름으로 저장
_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 …
).다음을 다음 항목에 추가하세요
~/.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
전체 경로를 지정할 필요가 없습니다.이미 안에 있다면 를
tmux
실행하세요tmux source-file ~/.tmux.conf
.tmux
다시 시작된 서버는 자동으로 이 파일을 얻습니다.( 기본값 은 + ) prefix>에서 솔루션을 테스트 해 보십시오 .prefix<
tmux
prefixCtrlb
답변2
마지막으로 방문한 창으로 전환하는 명령이 있습니다. ctrl-b
+;
#
키(또는 원하는 것)를 바인딩하여 마지막으로 방문한 tmux 창으로 전환할 수 있습니다 . vim에서 마지막 버퍼로 전환하는 #
방법과 비슷해서 선택했습니다 .:b#
# go to last pane (like b# in vim)
bind '#' select-pane -l
따라서 tmux 접두사(기본적으로 ctrl-b
)를 누른 다음 #
.