Cách tiếp cận tôi sử dụng kết hợp một chút câu trả lời của Ashish với piec; Tôi có mũi tên bên trái và bên phải bị ràng buộc với một chú thích vỏ nhỏ nhanh chóng di chuyển cửa sổ sang bên trái hoặc bên phải, trừ khi đó là cửa sổ đầu tiên hoặc cuối cùng, một cách trân trọng. Tôi đã làm điều này bởi vì, khi bạn phát hành hoán đổi +1 ở cửa sổ cuối cùng (hoặc hoán đổi -1 ở cửa sổ đầu tiên), nó vẫn sẽ trao đổi, thay vì lặp lại một lần nữa như bạn mong đợi:
0:one 1:two 2:three 3:zero*
Trở thành
0:zero* 1:two 2:three 3:one
Thay vì
0:zero* 1:one 2:two 3:three
Vì vậy, các lệnh tôi sử dụng dừng hoạt động khi cửa sổ đã đạt đến cạnh của danh sách:
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'
Điều này có thể dễ dàng được kết hợp với chỉ số cơ sở và cửa sổ số lại để có một danh sách các cửa sổ bắt đầu bằng một số tùy ý và không bao giờ có bất kỳ khoảng trống nào.
Nếu bạn đang sử dụng chỉ số cơ sở 1 như tôi và bạn không nghĩ mình sẽ vượt quá 999 cửa sổ, bạn có thể sử dụng một mẹo nhỏ để làm cho nó cuộn đúng cách, mặc dù các lệnh hơi phình ra:
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'
Điều này hoạt động bằng cách tạm thời di chuyển cửa sổ cuối cùng sang chỉ mục không sử dụng-0 và sau đó gọi move-window -r để đánh số lại chúng bắt đầu từ 1 lần nữa. Nó hoạt động tương tự khi di chuyển cửa sổ đầu tiên đến cuối; bằng cách chọn một số lượng lớn bạn sẽ không bao giờ sử dụng, nó đảm bảo rằng khi cửa sổ di chuyển -r kích hoạt lại, mọi thứ sẽ được đánh số như bạn mong đợi. Nếu bạn đang tự hỏi về refresh-client -S , điều đó là cần thiết bởi vì đôi khi, trong khi sắp xếp lại từ cửa sổ di chuyển sẽ hoạt động bình thường, thanh trạng thái sẽ không cập nhật cho đến khi có những thay đổi tiếp theo. Bằng cách buộc làm mới chỉ thanh trạng thái (-S), bạn tránh được điều này.
Vấn đề duy nhất tôi có thể tìm thấy với cách tiếp cận này là cửa sổ trao đổi sẽ hoàn toàn thay đổi cửa sổ được sử dụng lần cuối thành cửa sổ bạn đã tráo đổi. Do đó, nếu bạn ở cửa sổ số 1, hãy chuyển sang cửa sổ bốn và di chuyển nó trở lại cửa sổ số một, bạn sẽ thấy rằng cửa sổ được sử dụng cuối cùng của bạn là số 4 mới (trước đây là số 3) thay vì số 1. Dường như không có cách nào khác.
C-b
,.
cho phép bạn đánh số lại một cửa sổ.