重新排列tmux窗口


21

如何有效地重新排列tmux中的窗口?例如,具有以下窗口:

0:zsh  1:elinks  2:mutt  3:irssi  4:emacs  5:rss  6:htop

我要怎么做rss才能在elinks和之间移动mutt,最后得到:

0:zsh  1:elinks  2:rss  3:mutt  4:irssi  5:emacs  6:htop

我知道如何使用move-window将窗口移动到尚未使用的索引,并且我可以使用其中的一系列来实现此目的,但是显然,这很繁琐。


Answers:


38

swap-window 能帮你:

swap-window -t -1

它将当前窗口向左移动一个位置。

来自man tmux

swap-window [-d] [-s src-window] [-t dst-window]
             (alias: swapw)
This is similar to link-window, except the source and destination windows are swapped. 
It is an error if no window exists at src-window.

您可以将其绑定到密钥:

bind-key -n S-Left swap-window -t -1
bind-key -n S-Right swap-window -t +1

然后,您可以使用Shift+LeftShift+Right更改当前窗口位置。


但是我仍然必须执行一系列swap-window命令(示例中为三个),对吗?
igor 2014年

@igor:是的。另一种方法,您可以做swap-window -s 2 -t 5。该交换窗口号与2号窗口5
cuonglm

是的,但是我想保持所有其他窗口的顺序不变,因此对Windows#2和#5的“简单”交换对我而言并不适用。我已经知道该swap-window命令,但不知道-/ +前缀来定位上一个/下一个窗口。
igor 2014年

请参见unix.stackexchange.com/a/525770/12497,以了解swap-windowtmux较新版本中已更改的行为
Steven Lu

2

尽管最近的tmux版本中的行为表明swap-window命令不能使您处于同一窗口,但已被接受并高度评价的答案是正确的。因此,它的工作相当直观,您的活动窗口将朝那个方向交换,但您将保持原样!

要解决该问题,只需增加绑定即可。例如从我的tmux配置中:

bind -n C-S-Left { swap-window -t -1; previous-window }
bind -n C-S-Right { swap-window -t +1; next-window }

1

这是包装在bash函数中的有效解决方案。

list=$(tmux lsw -F '#I');                           # for shift left, could be moved inside function
list=$(tmux lsw -F '#I'); list=$(echo $list|rev);   # for shift right, list reversed
shift_tmux_window_range() {  # depend on `list`
    local started=0 beg=$1 end=$2
    for i in $list; do
        if (($i == $beg)); then
            started=1; h=$beg; tmux linkw -s $beg && tmux unlinkw -t $beg;
        elif (($i == $end)); then
            tmux movew -d -s $i -t $h; tmux movew -d -t $end; break;
        elif [ $started = 1 ]; then
            tmux movew -d -s $i -t $h; h=$i;
        fi;
    done
}

shift_tmux_window_range 5 2

奖励:如果当前活动窗口不受影响,请留在同一窗口中。


辉煌!谢谢。
亚历山大·伯德

-1

如果tmux是1.7或更高版本

move-window -r

要么

set-option -g renumber-windows on

.tmux.conf自动做,在未来。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.