В screen
, я могу просто набрать, C-a :number 0
чтобы переместить окно в верхнюю часть списка окон и сдвинуть все остальные окна вниз на одно. Для чего нужна эквивалентная последовательность команд tmux
? Я посмотрел на справочную страницу, но меня это смущает.
414
C-b
,.
Позволяет пронумеровать окно.swap-window -s number
иswap-window -t number
поменять текущее окно, смотрите мой ответ здесь .Ответы:
Команда
swap-window
ближе всего к тому, что вы хотите.«Префикс:» (то есть Ctrl+ B, :по умолчанию) приводит вас к tmux-командной строке. Там вы вводите:
чтобы окно № 3 и окно № 1 поменялись местами.
Чтобы поменять текущее окно с верхним, выполните:
В маловероятном случае отсутствия окна с индексом 0 выполните:
(если base-index равен 0, как по умолчанию).
Вы можете привязать эту команду к клавише (например, T для «top»), добавив следующее к вашему
~/.tmux.conf
:источник
move-window
работает, только если в данном индексе нет другого окна. Так что в большинстве случаевmove-window -t 0
это не сработает, так как обычно в этой позиции уже будет другое окно.movew
.bind-key L swap-window -t -1
сделать это последним окном.swapw -s number
иswapw -t number
поменять текущее окно, смотрите мой ответ здесь .Добавляя к ответу Гарета, вы можете использовать следующие привязки клавиш
Нажатие Ctrl + Shift + Left (переместит текущее окно влево. Аналогично вправо. Не нужно использовать модификатор (Cb).
источник
-1
и+1
синтаксис помогает решить проблему занятых индексов. tmux сместит другие окна для вас и автоматически завершит событие до конца / начала. Это лучший ответ.bind-key S-Left swap-window -t -1
, поэтому я могу сделать <prefix> shift + arrow, так как я не люблю портить привязки клавиш для программ.bind-key -n C-H swap-window -t -1
bind-key -n C-S-Left swap-window -t -1
однако она работает нормально при использовании префикса, как предложено @MatthewMitchellTmux эквивалентно
:number 42
is:move-window -t 42
.источник
:move-window
это не эквивалентно экрана:number
.:number
свопы, если место назначения существует,:move-window
в этом случае происходит сбой. Вы должны выбрать между:move-window
и:swap-window
Я перенумеровываю окна следующим образом:
Ctrl+ b,
.
,222
сделает текущее
tmux
окно (все панели) номер 222.В связи с этим: когда я шаркаю вещи вокруг, я склонен делать
Ctrl+b
:new-session -d -s "reading"
и оттуда я могу также использовать Ctrl+ b,
.
,reading
чтобы переместить текущее окно (все стекла сразу) к читальном сессии. Вы можете просматривать среди сессий с Ctrl+ b,s
как вы бы просматривать в течение сессии с помощью Ctrl+ b,w
.НТН
источник
Вы можете реализовать эквивалент команды
screen
`s,number
используя скрипт внешней оболочки, который выбирает междуswap-window
иmove-window
. Вы можете привязать его к ключу таким образом:~/.tmux.number.sh
:источник
-F
опцию, которая не поддерживается моей версией tmux.Использование swap-окна для перехода к любому идентификатору: [ближе к экрану: номер]
[m для перемещения -> нажмите префикс -m и введите, скажем, 3. . перенумеровать окно на 3]
источник
Поскольку ответ Ашиша Ариги не работает в версии 1.9a и ниже. Я использую
<
и,>
чтобы поменять местами окно влево и вправо, добавив строку ниже к.tmux.conf
.источник
Самое простое решение
man
, это использовать привязки по умолчанию:источник
Для тех из вас, кто использует в
byobu
качестве оболочки для tmux, вы можете поменять текущее окно с предыдущим или следующим окном с помощью:Связывание ключей, определенное
byobu
для этих ключей, может представлять интерес:источник
Подход, который я использую, сочетает в себе немного ответа Ашиша и Пика; У меня есть стрелка alt-left и right, привязанная к быстрой маленькой выноске оболочки, которая перемещает окно влево или вправо, если только это не первое или последнее окно, соответственно. Я сделал это потому, что, когда вы запускаете своп +1 в последнем окне (или своп -1 в первом окне), он все равно будет меняться, вместо того, чтобы возвращаться снова, как вы могли ожидать:
становится
Вместо
Итак, команды, которые я использую, перестают работать, когда окно достигает края списка:
Это можно легко комбинировать с base-index и renumber-windows, чтобы получить список окон, которые начинаются с произвольного числа и никогда не имеют пробелов.
Если вы используете базовый индекс 1, как я, и не думаете, что когда-нибудь превысите 999 окон, вы можете использовать небольшую хитрость, чтобы заставить его работать правильно, хотя команды немного раздуваются:
Это работает путем временного перемещения последнего окна в неиспользуемый индекс-0 и последующего вызова move-window -r для их нумерации, начиная с 1. Это работает аналогично при перемещении первого окна до конца; выбрав огромное количество, которое вы никогда не будете использовать, это гарантирует, что при повторном срабатывании move-window -r все будет пронумеровано так, как вы ожидаете. Если вас интересует refresh-client -S , это необходимо, потому что иногда, хотя переупорядочение из окна перемещения будет работать правильно, строка состояния не будет обновляться до тех пор, пока не будут внесены дополнительные изменения. Принудительно обновляя только строку состояния (-S), вы избегаете этого.
Единственная проблема, которую я могу найти с этим подходом, заключается в том, что swap-window неявно изменит последнее использованное окно на то, с которым вы менялись. Таким образом, если вы находитесь в окне № 1, переключитесь на окно четвертое и переместите его обратно на одно, вы обнаружите, что вашим последним использованным окном является новый № 4 (ранее № 3) вместо № 1. Кажется, нет никакого способа обойти это.
источник
Вы можете использовать,
base-index
чтобы изменить начальный номер для ваших окон. если вы установитеbase-index
на1
, тоmove-window -r
будет пронумеровать все окна , начиная1
, таким образом , освобождая0
переместить окно в слот:когда вы закончите, вы можете сбросить
base-index
на,0
если вы хотите использоватьmove-window -r
позже, не перемещая окно в0
источник
tmux-pain-control позволяет
ctrl-b >
иctrl-b <
перемещать сфокусированное окно вправо и влево, оборачиваясь вокруг.источник
И то
swap-window -s 5
и другоеswap-window -t 5
поменять местами окно с окном 5, но с другой семантикой.swap-window -s 5
swap-window -t 5
значения
number
inswap-window -s number
и-t number
могут быть как абсолютными , например, 5, так и относительными , например, -1, +2.PS ниже приведена выдержка из строки состояния tmux, иллюстрирующая эффект
swap-window -s 5
недавняя:
[0] 0:vim- 1:mpl 2:py2* 3:numpy 4:plot 5:mc
сейчас, после
last-window
:[0] 0:vim* 1:mpl 2:py2- 3:numpy 4:plot 5:mc
после
swapw -s 5
:[0] 0:mc* 1:mpl 2:py2- 3:numpy 4:plot 5:vim
другое
swapw -s 5
:[0] 0:vim* 1:mpl 2:py2- 3:numpy 4:plot 5:mc
другое
last-window
:[0] 0:vim- 1:mpl 2:py2* 3:numpy 4:plot 5:mc
источник
Из окна tmux попробуйте следующее, чтобы поменять окно 0 на 1:
$ tmux swap-window -d -s 0 -t 1
источник
Я думаю, что вы хотите связать новую комбинацию клавиш с командой «выбрать окно».
Я знаю, что вы сказали, что уже читали справочную страницу, но вам следует вернуться к ней. вам нужно изменить файл ~ / .tmux.conf, чтобы добавить команду bind-key.
В частности, посмотрите на страницу 4 следующего.
Страница man tmux
источник
choose-window
не похоже, чтобы переместить текущее окно в новую позицию.choose-window
уже связан сC-B w
.Это метод, который я использую. Вы все еще не можете переместить окно к занятому индексу, но вы можете переместить его на более высокий (неиспользуемый индекс) и переставить в промежутке, где был предыдущий индекс.
Скажем, у вас есть 3 окна и вы хотите добавить четвертое, но в том месте, где ранее было 3 окна.
Прежде чем добавить новое окно: префикс Tmux затем. откроет команду перемещения. Введите 4 и индекс 3 теперь станет 4, затем просто добавьте другое окно, и оно будет с индексом 3, а ваше старое окно все еще будет с индексом 4.
источник
Сначала откройте команду tmux, нажмите и отпустите:
И чтобы изменить фактическое окно на правильное окно (в круговом порядке), просто выполните:
Чтобы изменить фактическое окно влево:
SHIFT
при нажатии}
или{
.источник
Для чего это стоит:
Я взломал этот скрипт вместе, чтобы иметь возможность заказать все окна в "TUI". Он перечисляет все ваши окна во временном файле, открывает его в редакторе по умолчанию (предполагается, что вы установили $ EDITOR). После этого вы можете изменить порядок строк, а после сохранения и закрытия файла окна будут переупорядочены соответствующим образом. (Это похоже на порядок коммитов при выполнении
git rebase -i
)Возможно, это можно было бы улучшить, в частности:
ПРИМЕЧАНИЕ. После выполнения команды вы можете перейти в другое окно.
Подарок в действии (github)
источник
Ни один из приведенных здесь ответов не удовлетворил меня, поэтому я написал сценарий, который (как бы) имитирует
screen
поведение при перемещении оконtmux
.Он определяет, меньше ли номер окна назначения , чем наименьший номер окна, или больше, чем самый большой номер окна, и, если это так, подталкивает все другие окна вправо или влево (соответственно) и нумерует их нумерацию с 1-N постепенно , Это делается с помощью
move-window
команды.Если номер окна находится между самыми маленькими / самыми большими числами (то есть, предположительно, соответствует существующему номеру окна), он просто меняет их с помощью
swap-window
команды.Вот сценарий:
Затем просто добавьте эту простую привязку ключей к вашему
.tmux.conf
:Примечание . Чтобы идеально имитировать
screen
поведение подкачки окон, я считаю, что когда вы перемещаете окно к существующему номеру окна, оно должно занимать место этого окна, а все остальные окна смещаются вправо . Было бы довольно просто изменить этот скрипт для этого.источник
Нет необходимости в командной строке (которая Ctrl+ bи затем :)
Просто переместите свои окна с
Ctrl+ b+:
затем введите новый (свободный) номер окна и нажмите Enter
Если теперь есть свободный номер окна, используйте Ctrl+ b+ .для перенумерации окна.
(Совет: назовите ваши окна с Ctrl+ b+, ,если вы потеряли трек, который есть какой)
источник