Підхід, який я використовую, поєднує в собі частину відповіді Ашиша з piec's; У мене стрілка вліво-вліво і вправо прив’язана до швидкого опису оболонки, яка з повагою переміщує вікно вліво або вправо, якщо це не перше чи останнє вікно. Я зробив це, тому що, коли ви видасте своп +1 у останньому вікні (або поміняєте своєю позначкою -1 у першому вікні), він все одно помінятиметься, замість того, щоб знову лупити назад, як ви могли очікувати:
0:one 1:two 2:three 3:zero*
Стає
0:zero* 1:two 2:three 3:one
Замість
0:zero* 1:one 2:two 3:three
Отже, команди, які я використовую, перестають працювати, коли вікно досягло краю списку:
bind-key -n M-Left run-shell 'tmux list-windows | head -n 1 | grep -q active || tmux swap-window -t -1'
bind-key -n M-Right run-shell 'tmux list-windows | tail -n 1 | grep -q active || tmux swap-window -t +1'
Це може легко поєднуватися з базовим індексом і перенумеруванням вікон, щоб мати список вікон, які починаються з довільної кількості і ніколи не мають прогалин.
Якщо ви використовуєте базовий індекс 1, як я, і вам не здається, що ви коли-небудь перейдете вище 999 вікон, ви можете скористатися невеликим трюком, щоб змусити його правильно прокручуватися, хоча команди трохи процвітають:
set -g base-index 1
set -g renumber-windows on
bind-key -n M-Left run-shell 'if tmux list-windows | head -n 1 | grep -q active ; then tmux move-window -t 999 \; move-window -r \; refresh-client -S ; else tmux swap-window -t -1 ; fi'
bind-key -n M-Right run-shell 'if tmux list-windows | tail -n 1 | grep -q active ; then tmux move-window -t 0 \; move-window -r \; refresh-client -S ; else tmux swap-window -t +1 ; fi'
Це працює, тимчасово переміщаючи останнє вікно до невикористаного індексу-0, а потім викликаючи move-window -r, щоб перенумерувати їх, починаючи з 1. Це працює аналогічно при переміщенні першого вікна до кінця; вибираючи величезну кількість, яку ви ніколи не будете використовувати, це гарантує, що при переміщенні віконця -r знову все буде пронумеровано так, як ви очікували. Якщо вам цікаво refresh-client -S , це необхідно, тому що іноді, хоча переупорядкування з вікна переміщення буде працювати належним чином, рядок стану не оновлюватиметься, поки не будуть внесені подальші зміни. Примушуючи оновити лише рядок стану (-S), ви цього уникаєте.
Єдине питання, яке я можу знайти при такому підході, це те, що swap-вікно неявно змінить останнє використане вікно на те, з чим ви обмінялися. Таким чином, якщо ви перебуваєте у вікні №1, перейдіть до вікна чотири та перемістіть його назад, ви побачите, що вашим останнім використаним вікном є новий №4 (раніше №3) замість №1. Здається, це не існує.
C-b
,.
дозволяє перенумерувати вікно.