11

В tmux есть команда «move-window», с помощью которой вы можете переместить окно к указанному пустому индексу следующим образом:

move-window -t 3

Однако, если индекс 3 уже занят, вы не сможете переместить текущее окно в позицию 3.

Я ищу вариант, который позволит мне переместить (вставить) мое окно в положение 3, даже если оно уже занято, а затем увеличить номера окон для других последующих окон (например, то, которое было первоначально в 3, теперь будет будет 4, далее будет 5 и т. д.)

3 ответа3

22

Попробуйте: new-window -a

использование опции -a при создании нового окна может вставить новое сразу после следующего индекса, в то время как индекс всех остальных последующих окон будет увеличиваться автоматически.

2

Сценарий ниже позволит вам делать то, что вы хотите. Вы можете запустить его из командной строки или сделать:

:run "ins-move 2 5"

Этот пример перемещает окно два в положение перед окном пять.

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

У меня есть решение без необходимости использования внешних скриптов. Поместите следующее в ваш .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;                   \
    "'                                               

Я начал использовать упрощенную версию с помощью следующих 2 команд в .tmux.conf:

 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'

Prefix-i вставляет новое окно в положение x, когда окно x существует, и перемещает окна выше этого. Префикс-I создает новое окно в позиции x, когда окно x не существует.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .