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不存在。