Перенумерация окон в tmux

128

Я часто получаю более десяти окон в tmux. Позже я закрываю некоторые из моих старых. Есть ли способ перенумеровать, скажем, окно 15, в окно 3 (которого больше нет)? Или к packним все снова, чтобы не было пустых слотов? Я хотел бы сделать это, потому что трудно перейти к окнам с более высокими номерами, потому что вы не можете сделать это Ctrl+B, 15. Я должен использовать Ctrl+B, wдля отображения списка окон, а затем введите букву, соответствующую окну, которое я хочу открыть.

Я знаю, что могу поменять окна. Например, я мог бы создать новое окно ( Ctrl+B, c), которое открывалось бы в пустом слоте 3. Затем я могу открыть swapwокно 15 и окно 3, а затем закрыть окно 15. Очевидно, это утомительный подход.

Как вы управляете многими окнами в tmux?

кендырь
источник

Ответы:

123

Похоже, вам нужно это:

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перенумерует все окна одновременно.

gelraen
источник
5
Для тех , кто нуждается в более явной инструкции: ctrl b :введите move-window -r(где ctrl bнаходится ключ префикс по умолчанию)
отметка
92

В tmux 1.7 есть несколько функций, которые могут помочь установить и поддерживать номера окон без пробелов / упаковок:

  • Команда move-windowузнала новую -rопцию, которая перенумерует все окна в сеансе (либо текущий сеанс, либо сеанс, указанный в -tопции).

    Если у вас есть набор окон, например {1: A, 4: B, 15: C}, вы можете move-window -rизменить их на {1: A, 2: B, 3: C} (они начнутся с вашего base-index; 1 в этом примере).

  • Когда renumber-windowsопция сессии включена, tmux автоматически перенумерует окна сессии (как в случае с move-window -r) после закрытия любого окна.

    Если вам нравится это поведение, вы можете включить его в глобальном значении, чтобы все сеансы, которые не переопределяли его, автоматически включали его:

    set-option -g renumber-windows on
    
Крис Джонсен
источник
4
В заключение! Я искал этот renumber-windowsвариант целую вечность! Меня всегда беспокоило, что новые окна открываются «слева», потому что я закрываю некоторые раньше.
Ory Band
15

Я часто нахожусь в ситуации, когда у меня есть промежутки между номерами окон, например, сессия с окнами:

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..."
gospes
источник
1
Это отличается от запуска "move-window -r"?
PonyEars
2
Нет это не так. Я просто не знал о опции -r для перемещения окна :) никогда не поздно учиться, спасибо!
Госпес
6

Предыдущие ответы все в порядке, но вот краткое решение, если все, что вам нужно, это перетасовывать небольшое количество окон время от времени.

move-window -t <number>

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

move-window -s 3 -t 99
move-window -s 5 -t 3
move-window -s 99 -t 5
Pistos
источник
2

Если вам просто нужны окна, чтобы всегда перенумеровать, когда один из них убит, вы можете использовать это в .tmux.conf:

set-option -g renumber-windows on
jojman
источник