tmux에서 창을 효율적으로 재정렬하려면 어떻게해야합니까? 예를 들어,이 창 세트를 갖는 경우 :
0:zsh 1:elinks 2:mutt 3:irssi 4:emacs 5:rss 6:htop
와 rss
사이 를 이동하려면 어떻게해야합니까 ?elinks
mutt
0:zsh 1:elinks 2:rss 3:mutt 4:irssi 5:emacs 6:htop
move-window
창을 아직 사용하지 않은 인덱스로 이동하는 방법을 알고 있으며이를 달성하기 위해 일련의 항목을 사용할 수는 있지만 매우 지루합니다.
답변
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+Left
및 Shift+Right
현재 창 위치를 변경합니다.
답변
최근의 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 }
답변
다음은 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
보너스 : 현재 활성 창이 영향을받지 않으면 같은 창에 머물러 있습니다.
답변
경우 tmux
버전 1.7 이상이다
move-window -r
또는
set-option -g renumber-windows on
에서 .tmux.conf
자동으로 미래에 일을합니다.