В screen, я могу просто набрать, C-a :number 0чтобы переместить окно в верхнюю часть списка окон и сдвинуть все остальные окна вниз на одно. Для чего нужна эквивалентная последовательность команд tmux? Я посмотрел на справочную страницу, но меня это смущает.
Как мне изменить порядок окон tmux?
19 ответов
Команда swap-windowближе всего к тому, что вы хотите.
«Префикс:» (то есть «Ctrl-B:» по умолчанию) приводит вас к командной строке tmux. Там вы вводите:
swap-window -s 3 -t 1 чтобы окно № 3 и окно № 1 поменялись местами.
Чтобы поменять текущее окно с верхним, выполните:
swap-window -t 0 В маловероятном случае отсутствия окна с индексом 0 выполните:
move-window -t 0 (если base-index равен 0, как по умолчанию).
Вы можете привязать эту команду к клавише (например, T для «top»), добавив следующее к вашему ~/.tmux.conf:
bind-key T swap-window -t 0 Спасибо за редактирование, но move-window работает только в том случае, если по данному индексу нет другого окна. Поэтому в большинстве случаев move-window -t 0 не будет работать, так как обычно в этой позиции уже будет другое окно.
Это верно, я улучшу это.
Возможно, вы захотите взглянуть на movew.
Также, bind-key L swap-window -t -1, чтобы сделать его последним окном.
Чтобы узнать разницу между swapw -s number и swapw -t number для замены текущего окна, см. Мой ответ здесь.
Adding to Gareth's answer, you can use the following key bindings
bind-key -n C-S-Left swap-window -t -1 bind-key -n C-S-Right swap-window -t +1 Pressing Ctrl+Shift+Left (will move the current window to the left. Similarly right. No need to use the modifier (C-b).
Этот синтаксис -1 и + 1 помогает решить проблему занятых индексов. tmux сдвинет другие окна для вас и автоматически завершит событие до конца / начала. Это лучший ответ.
Я пришел сюда в поисках самого быстрого способа написать эти точные привязки. Спасибо!
Это благочестиво! Благодарю.
Моя неспособность легко перемещать окна tmux беспокоила меня в течение нескольких недель. Это значительно облегчает работу с окнами! Большое спасибо от этого недавнего преобразования Tmux.
Это, действительно, самый полезный ярлык в моем репертуаре, спасибо, что поделились этим.
Это не работает в tmux 1.9a. Может кто-нибудь еще подтвердить, на какой версии будет работать эта привязка клавиш?
Если вы используете буквы, вам нужно использовать заглавную букву, а не CS, например: bind-key -n CH swap-window -t -1
У меня также есть проблема на 1.9a при использовании Ashish Ariga bind-key -n CS-Left swap-window -t -1, однако он работает нормально при использовании префикса, предложенного @MatthewMitchell
Мне нравится идея привязки клавиш CS-Left / Right. Однако, когда я пробовал это на моем Mac (10.12.4 Sierra) с tmux 2.3, он не работал. Я не уверен, захвачен ли он Terminal.app или другими настройками системы. Любая помощь будет оценена!
превосходная работа! наконец-то разобрались со своими окнами! Я выключил номера на окнах
Tmux эквивалентно :number 42is :move-window -t 42.
Это связано с Cb.
Спасибо! Это намного лучше, чем принятый ответ IMO.
@ArlenCuss На самом деле оба ответа хороши и полезны. Вы видите, используя screen: number, который вы можете поменять местами, используя tmux: move-window, вы можете перемещать окно, только если целевой индекс не используется. Итак, imo, и: swap-window, и: move-window необходимы для контроля над расположением окон :)
+1 за получение ответа от гуру программирования (также за правильность). Это единственный способ заставить его работать в активном окне
: move-window tmux * не * эквивалентно: number экрана. : number меняет местами, если место назначения существует, в этом случае происходит сбой: move-window. Вы должны выбрать между : move-window и: swap-window
Мне было интересно, если число 42 является ссылкой на Руководство автостопом по Галактике?
Омар - конечно! Это один из моих любимых номеров для использования в примерах.
Вы можете реализовать эквивалент команды screen`s, numberиспользуя скрипт внешней оболочки, который выбирает между swap-windowи move-window. Вы можете привязать его к ключу таким образом:
bind < command-prompt -p index "run-shell '~/.tmux.number.sh %%'" ~/.tmux.number.sh:
#!/bin/bash if [ $# -ne 1 -o -z "$1" ]; then exit 1 fi if tmux list-windows | grep -q "^$1:"; then tmux swap-window -t $1 else tmux move-window -t $1 fi Очень хорошее решение, отлично работает! Я только что сделал незначительные правки для очистки и удалил опцию -F, которая не принимается моей версией tmux.
I renumber windows like this:
Ctrl+b, ., 222
would make the current tmux window (all panes) number 222.
Relatedly: When I'm shuffling things around I tend to want to do
Ctrl+b :new-session -d -s "reading"
and from there I can also use Ctrl+b, ., reading to move the current window (all panes at once) over to the reading session. You can browse among sessions with Ctrl+b, s the way you would browse within session using Ctrl+b, w.
HTH
Использование swap-окна для перехода к любому идентификатору: [ближе к экрану: номер]
# window movement / renumbering like in screen's :number bind-key m command-prompt -p "move window to:" "swap-window -t '%%'" [m для перемещения -> нажмите префикс -m и введите, скажем, 3. . перенумеровать окно на 3]
Это уже хорошо, но еще лучше: сделайте swap-window и, если это не получится, вернитесь к move-window
Since Ashish Ariga's answer doesn't work on version 1.9a and below. I use < and > to swap window to left and right, respectively, by adding the line below to .tmux.conf.
# swap window to left or right bind-key -r < swap-window -t -1 bind-key -r > swap-window -t +1 For those of you who use byobu as your wrapper for tmux, you can swap the current window with the previous or next window with:
Ctrl-Shift-F3 Ctrl-Shift-F4 The key binding defined by byobu for these keys may be of interest:
bind-key -n C-S-F3 swap-window -t :-1 bind-key -n C-S-F4 swap-window -t :+1 Было бы здорово, если бы вы могли перемещаться по сплитам * в * определенном окне.
Самое простое решение man, это использовать привязки по умолчанию:
{ Swap the current pane with the previous pane. } Swap the current pane with the next pane. Tmux окна и панели разные.
Это все еще помогло мне получить то, что я хотел
Этот вопрос касается окон, а не окон
Подход, который я использую, сочетает в себе немного ответа Ашиша и Пика; У меня есть стрелка alt-left и right, привязанная к быстрой маленькой выноске оболочки, которая перемещает окно влево или вправо, если только это не первое или последнее окно, соответственно. Я сделал это потому, что, когда вы запускаете своп +1 в последнем окне (или своп -1 в первом окне), он все равно будет меняться, вместо того, чтобы повторять цикл снова, как вы могли ожидать:
0:one 1:two 2:three 3:zero* становится
0:zero* 1:two 2:three 3:one Вместо
0:zero* 1:one 2:two 3:three Итак, команды, которые я использую, перестают работать, когда окно достигает края списка:
bind-key -n M-Left run-shell 'tmux list-windows | head -n 1 | grep -q active || tmux swap-window -t -1' bind-key -n M-Right run-shell 'tmux list-windows | tail -n 1 | grep -q active || tmux swap-window -t +1' Это можно легко комбинировать с base-index и renumber-windows, чтобы получить список окон, которые начинаются с произвольного числа и никогда не имеют пробелов.
Если вы используете базовый индекс 1, как я, и не думаете, что когда-нибудь превысите 999 окон, вы можете использовать небольшую хитрость, чтобы заставить его работать правильно, хотя команды немного раздуваются:
set -g base-index 1 set -g renumber-windows on bind-key -n M-Left run-shell 'if tmux list-windows | head -n 1 | grep -q active ; then tmux move-window -t 999 \; move-window -r \; refresh-client -S ; else tmux swap-window -t -1 ; fi' bind-key -n M-Right run-shell 'if tmux list-windows | tail -n 1 | grep -q active ; then tmux move-window -t 0 \; move-window -r \; refresh-client -S ; else tmux swap-window -t +1 ; fi' Это работает путем временного перемещения последнего окна в неиспользуемый индекс-0 и последующего вызова move-window -r для их нумерации, начиная с 1. Это работает аналогично при перемещении первого окна до конца; выбрав огромное количество, которое вы никогда не будете использовать, это гарантирует, что при повторном срабатывании move-window -r все будет пронумеровано так, как вы ожидаете. Если вас интересует refresh-client -S, это необходимо, потому что иногда, хотя переупорядочение из окна перемещения будет работать правильно, строка состояния не будет обновляться до тех пор, пока не будут внесены дополнительные изменения. Принудительно обновляя только строку состояния (-S), вы избегаете этого.
Единственная проблема, которую я могу найти с этим подходом, заключается в том, что swap-window неявно изменит последнее использованное окно на то, с которым вы менялись местами. Таким образом, если вы находитесь в окне № 1, переключитесь на окно четвертое и переместите его обратно на одно, вы обнаружите, что вашим последним использованным окном является новый № 4 (ранее № 3) вместо № 1. Кажется, нет никакого способа обойти это.
Cb,.позволяет перенумеровать окно.