De aanpak die ik gebruik combineert een beetje van Ashish’s antwoord met dat van Piec; ik heb alt-left en right arrow gebonden aan een snelle kleine shell callout die het venster één naar links of rechts verplaatst, tenzij het het eerste of het laatste venster is, respectievelijk. Ik deed dit omdat, wanneer je een swap +1 uitvoert op het laatste venster (of swap -1 op het eerste venster), het nog steeds zal swappen, in plaats van weer terug te lussen zoals je zou verwachten:
0:one 1:two 2:three 3:zero*
Wordt
0:zero* 1:two 2:three 3:one
In plaats van
Dus, de commando’s die ik gebruik stoppen met werken wanneer het venster de rand van de lijst heeft bereikt:
0:zero* 1:one 2:two 3:three
Dit kan gemakkelijk worden gecombineerd met base-index en renumber-windows om een lijst van vensters te hebben die begint bij een willekeurig nummer en nooit gaten vertoont.
Als je base-index 1 gebruikt zoals ik en je denkt niet dat je ooit boven de 999 vensters zult komen, kun je een trucje gebruiken om het goed te laten rollen, hoewel de commando’s een beetje opzwellen:
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'
Dit werkt door het laatste venster tijdelijk te verplaatsen naar de ongebruikte index-0 en dan move-window -r op te roepen om ze opnieuw te nummeren, beginnend bij 1. Hetzelfde geldt voor het verplaatsen van het eerste venster naar het einde; door een groot nummer te kiezen dat je nooit zult gebruiken, wordt ervoor gezorgd dat wanneer move-window -r opnieuw afvuurt, alles genummerd zal zijn zoals je zou verwachten. Als je je afvraagt hoe het zit met refresh-client -S, dat is nodig omdat soms, terwijl de herschikking van move-window goed werkt, de statusbalk niet wordt bijgewerkt totdat er verdere wijzigingen zijn gemaakt. Door een refresh van alleen de statusbalk te forceren (-S), voorkom je dit.
Het enige probleem dat ik kan vinden met deze aanpak is dat swap-window impliciet het laatst gebruikte venster zal veranderen in het venster waarmee je hebt geruild. Dus, als je in venster #1 bent, overschakelt naar venster vier en het één terugzet, zul je merken dat je laatst gebruikte venster het nieuwe # 4 (voorheen #3) is in plaats van #1. Er lijkt geen manier te zijn om dit te omzeilen.