tmux-在指定位置插入窗口

tmux-在指定位置插入窗口

tmux 有“move-window”命令,你可以用它将窗口移动到指定位置空的像这样索引:

move-window -t 3

然而,如果索引 3 已经被占用,您将无法将当前窗口移动到位置 3。

我正在寻找一个选项,使我能够将窗口移动(插入)到位置 3,即使该位置已被占用,然后增加其他后续窗口的窗口编号(例如,原来位于 3 的窗口现在为 4,接下来的窗口为 5 等等)

答案1

下面的脚本可以让你做你想做的事。你可以从 shell 提示符运行它,也可以执行以下操作:

:run "ins-move 2 5"

该示例将窗口二移动到窗口五之前的位置。

#!/bin/bash
for ((i=$1; i<$2-1; i++))
do
    tmux swap-window -s :$i -t :$((i+1))
done

答案2

尝试:new-window -a

创建新窗口时使用 -a 选项可以将新窗口插入到下一个索引处,而所有其他后续窗口的索引将自动增加。

答案3

至少在 tmux 3.2a 中,你可以简单地使用以下命令运行 OP 的命令-a

move-window -a -t 3

答案4

我有一个不需要外部脚本的解决方案。将以下内容放入您的 .tmux.conf 中:

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;"'

按 [PREFIX]-i 并提供所需的插入位置。最后 2 个 select-window 命令确保“上一个”窗口按预期设置,然后转到插入的窗口。

编辑:好吧,我说得太早了。我不得不改成,#I因为#{window_id}插入时某些窗口的窗口索引会发生变化。新函数(添加了换行符以提高可读性):

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;                   \
    "'                                               

我开始使用简化版本,通过 .tmux.conf 中的以下 2 个命令:

 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'

前缀-i 在位置插入一个新窗口X当窗口X存在,并将该窗口上方的窗口向上移动。前缀-I 在位置处创建一个新窗口X当窗口X不存在。

相关内容