- Published on
让 tmux 窗口像浏览器标签一样左右移动
- Authors

- Name
- Tails Azimuth
痛点
浏览器里按 Cmd+Shift+[ / Cmd+Shift+] 就能把当前标签左右挪动,非常顺手。切到 tmux,很多人第一反应是绑定 swap-window:
bind < swap-window -t -1
bind > swap-window -t +1
看起来能用,但有两个毛病:
- 焦点会跟着窗口跑——窗口挪到第 5 个位置,你的视线和当前激活窗口也跳走了,连续移动时眼花。
- 虽然能交换,但缺少
-r(repeat)修饰,每次都要重新按 prefix,不够连贯。
解决方案
在 ~/.tmux.conf 里加两行:
# 当前窗口左移 / 右移,焦点保持不变
bind -r < swap-window -d -t -1
bind -r > swap-window -d -t +1
配合我的 prefix 是 Ctrl+s,操作就是:
Ctrl+s然后<—— 当前窗口左移一位;Ctrl+s然后>—— 当前窗口右移一位;- 由于
-r,按完一次后可以连按<<<,无需重复 prefix。
到达最左/最右边界时自动停止,不会循环,也不报错。
三个参数为什么都不能省
-d:不要跟着窗口走
swap-window 默认会把当前激活焦点移到交换后的位置。加了 -d(detached),焦点留在原地(也就是交换后窗口所在的新位置……实际上是你视觉上"窗口在动、屏幕不动"的效果)。连续移动时这一点至关重要。
-t -1 / -t +1:相对索引
-t 接受相对当前窗口的偏移。-1 是前一个、+1 是后一个,tmux 自动处理到边界的情况。
-r:可重复按键
bind -r 声明的键,在 prefix 后的 repeat 时间窗内可以连续按下而不必每次重按 prefix。这是"像浏览器一样丝滑"的关键。
完整片段
# ~/.tmux.conf
set -g prefix C-s
unbind C-b
bind C-s send-prefix
# 窗口左右移动(焦点不动,可连续按)
bind -r < swap-window -d -t -1
bind -r > swap-window -d -t +1
# 可选:用 Shift+Left/Right 直接触发,连 prefix 都省了
bind -r S-Left swap-window -d -t -1
bind -r S-Right swap-window -d -t +1
最后两行是进阶玩法:直接用 Shift+方向键,连 prefix 都不必按——但记得 bind -r 仍然提供 repeat 能力。
小结
swap-window -d -t ±1 加上 bind -r,三件套凑齐,tmux 的窗口重排就能达到浏览器标签的顺滑程度。-d 保证焦点稳定,-t 用相对索引省去心算,-r 让连续操作无需重复 prefix。