TMux 창 재정렬


21

tmux에서 창을 효율적으로 재정렬하려면 어떻게해야합니까? 예를 들어,이 창 세트를 갖는 경우 :

0:zsh  1:elinks  2:mutt  3:irssi  4:emacs  5:rss  6:htop

rss사이 를 이동하려면 어떻게해야합니까 ?elinksmutt

0:zsh  1:elinks  2:rss  3:mutt  4:irssi  5:emacs  6:htop

move-window창을 아직 사용하지 않은 인덱스로 이동하는 방법을 알고 있으며이를 달성하기 위해 일련의 항목을 사용할 수는 있지만 매우 지루합니다.


1
이 SU Q & A는 당신이 원하는 것을 보여줍니다 : superuser.com/questions/343572/how-do-i-reorder-tmux-windows
slm

답변:


38

swap-window 당신을 도울 수 있습니다 :

swap-window -t -1

현재 창을 한 위치 왼쪽으로 이동합니다.

에서 남자 TMUX :

swap-window [-d] [-s src-window] [-t dst-window]
             (alias: swapw)
This is similar to link-window, except the source and destination windows are swapped. 
It is an error if no window exists at src-window.

키에 바인딩 할 수 있습니다.

bind-key -n S-Left swap-window -t -1
bind-key -n S-Right swap-window -t +1

그럼 당신은 사용할 수 있습니다 Shift+LeftShift+Right현재 창 위치를 변경합니다.


그러나 여전히 일련의 swap-window명령 을 수행해야 합니다 (예를 들어 3 개). 맞습니까?
igor

@igor : 그렇습니다. 다른 방법으로 할 수 있습니다 swap-window -s 2 -t 5. 이 스왑 창 번호 2는 창 번호 5입니다.
cuonglm

그렇습니다. 그러나 다른 모든 창의 순서를 그대로 유지하고 싶기 때문에 창 # 2와 # 5의 '간단한'스와핑은 나에게 도움이되지 않습니다. 이미 swap-window명령 에 대해 알고 있었지만 이전 / 다음 창을 대상으로하는 -/ +접두사 에 대해서는 알지 못했습니다 .
igor

최신 tmux 버전에서 변경된 동작을 해결하려면 unix.stackexchange.com/a/525770/12497 을 참조하십시오swap-window
Steven Lu

2

최근의 tmux 버전에서 동작에 따라 swap-window 명령이 동일한 창에서 유지되지 않는 것으로 확인되었지만 승인 된 답은 정답입니다. 직관적이지 않은 방식으로 작동하므로 활성 창은 그 방향으로 바뀌지 만 동일한 슬롯에 그대로 있습니다!

이 문제를 해결하려면 바인드를 보강하여 따르십시오. 예를 들어 내 tmux 구성에서 :

bind -n C-S-Left { swap-window -t -1; previous-window }
bind -n C-S-Right { swap-window -t +1; next-window }

1

다음은 bash 함수로 래핑 된 작업 솔루션입니다.

list=$(tmux lsw -F '#I');                           # for shift left, could be moved inside function
list=$(tmux lsw -F '#I'); list=$(echo $list|rev);   # for shift right, list reversed
shift_tmux_window_range() {  # depend on `list`
    local started=0 beg=$1 end=$2
    for i in $list; do
        if (($i == $beg)); then
            started=1; h=$beg; tmux linkw -s $beg && tmux unlinkw -t $beg;
        elif (($i == $end)); then
            tmux movew -d -s $i -t $h; tmux movew -d -t $end; break;
        elif [ $started = 1 ]; then
            tmux movew -d -s $i -t $h; h=$i;
        fi;
    done
}

shift_tmux_window_range 5 2

보너스 : 현재 활성 창이 영향을받지 않으면 같은 창에 머물러 있습니다.


훌륭한! 고맙습니다.
Alexander Bird

-1

경우 tmux버전 1.7 이상이다

move-window -r

또는

set-option -g renumber-windows on

에서 .tmux.conf자동으로 미래에 일을합니다.

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