在 tmux 中重新编号窗口

在 tmux 中重新编号窗口

我经常在 tmux 中出现十多个窗口。后来,我关闭了一些旧的。有没有办法将窗口 15 重新编号为窗口 3(该窗口已不存在)?或者把pack它们全部重新放起来,这样就没有空槽了?我想这样做是因为很难跳到编号更高的窗口,因为你不能这样做Ctrl+B, 15。我必须使用Ctrl+B, w列出窗口,然后键入与我要打开的窗口相对应的字母。

我知道我可以交换窗户。例如,我可以创建一个新窗口 ( Ctrl+B, c),它将在空插槽 3 中打开。然后我可以swapw打开窗口 15 和窗口 3,然后关闭窗口 15。显然,这是一种乏味的方法。

如何在 tmux 中管理多个窗口?

答案1

看起来你需要这个:

move-window [-rdk] [-s src-window] [-t dst-window]
              (alias: movew)
        This is similar to link-window, except the window at src-window
        is moved to dst-window.  With -r, all windows in the session are
        renumbered in sequential order, respecting the base-index option.

不带参数的调用movew将当前窗口移动到第一个空闲位置。movew -r将立即重新编号所有窗口。

答案2

多路复用器1.7 有一些功能可以帮助建立和维护无间隙/填充窗口号:

  • move-window命令学习了一个新-r选项,它将对会话中的所有窗口(当前会话或使用该-t选项指定的会话)重新编号。

    如果您有一组像 { 1:A, 4:B, 15:C } 这样的窗口,那么您可以运行将它们重新编号为 { 1:A, 2:B, 3:C } (它们将以您的;move-window -r开头)base-index本例中为 1)。

  • renumber-windows启用会话选项时,多路复用器move-window -r在关闭任何窗口后,将自动对会话的窗口重新编号(与 一样)。

    如果您喜欢这种行为,您可以在全局值中将其打开,以便所有不覆盖它的会话都会自动启用它:

    set-option -g renumber-windows on
    

答案3

我经常发现自己处于窗口编号之间有间隙的情况,例如与窗口的会话:

1 3 4 8 9 13

我编写了一个 tmux 脚本来对它们进行重新排序,而不更改它们各自的顺序,也不激活“重新编号窗口”选项。结果:

1 2 3 4 5 6

将以下内容放入 .tmux.conf 中:

bind R                                      \
    set -g renumber-windows on\;            \
    new-window\; kill-window\;              \
    set -g renumber-windows off\;           \
    display-message "Windows reordered..."

按 [PREFIX]-R 重新排序窗口(或更改绑定)。

我目前正在运行 tmux 1.9a。

上面的内容可以用更简单的替换:

bind R                                      \
    move-window -r\;                        \
    display-message "Windows reordered..."

答案4

前面的答案都很好,但如果您只想偶尔洗牌少量窗口,那么这里有一个简洁的解决方案。

move-window -t <number>

会将当前窗口移动到一个新的窗口号(该窗口号必须尚未被占用)。要交换两个窗口,请先暂时将一个窗口移动到新号码。例如交换窗口 3 和 5:

move-window -s 3 -t 99
move-window -s 5 -t 3
move-window -s 99 -t 5

相关内容