Tôi đã có một giải pháp mà không cần kịch bản bên ngoài. Đặt nội dung sau vào .tmux.conf của bạn:
bind i command-prompt -p 'Insert window at:' 'run-shell "if tmux select-window -t %1; then tmux new-window -a; tmux swap-window -s %1 -t \$((%1+1)); else tmux new-window; tmux move-window -t %1; fi; tmux select-window -t #I; tmux select-window -t %1;"'
Nhấn [PREFIX] -i và cung cấp vị trí chèn mong muốn. 2 lệnh cửa sổ chọn cuối cùng đảm bảo cửa sổ 'trước' được đặt như mong đợi và bạn đi đến cửa sổ được chèn.
EDIT: ok, tôi đã nói quá sớm. Tôi đã phải thay đổi #I
để #{window_id}
vì chỉ số cửa sổ thay đổi cho một số cửa sổ trên chèn. Chức năng mới (có thêm dòng mới để dễ đọc):
bind i command-prompt -p 'Insert window at:' ' \
run-shell " \
if tmux select-window -t %1; then \
tmux new-window -a; \
tmux swap-window -s %1 -t \$((%1+1)); \
else \
tmux new-window; \
tmux move-window -t %1; \
fi; \
tmux select-window -t #{window_id}; \
tmux select-window -t %1; \
"'
Tôi bắt đầu sử dụng một phiên bản đơn giản hóa, thông qua 2 lệnh sau trong .tmux.conf:
bind i command-prompt -p 'Insert window at:' 'new-window -a -t %1; swap-window -t -1'
bind I command-prompt -p 'New window at:' 'new-window -t %1'
Tiền tố-i chèn một cửa sổ mới ở vị trí x khi cửa sổ x tồn tại và di chuyển các cửa sổ lên trên cửa sổ đó. Tiền tố-Tôi tạo một cửa sổ mới ở vị trí x khi cửa sổ x không tồn tại.