Tmux позволяет разбить консоль на любое количество подокон, перемещаться между ними, менять размер, и в каждом запускать обычные приложения, как в обычном терминале.
Для примера на скриншоте стандартный терминал, с загруженным в него tmux, о чём свидетельствует зелёная полоса внизу. Экран разбит на три окошка, в верхнем mc, в нижнем левом vim с открытым конфигом tmux, и в третьем окне запущен скринсейвер cmatrix. В рабочей ситуации обычно два окна, в одном vim, в другом запущенная программа на python.
Установка в Manjaro Linux: yaourt -S tmux libevent tmux # ЗАПУСК
Конфиг: ~/.tmux.conf
При запуске tmux создаёт активную сессию и окно, его можно разделить на множество мелких. Либо добавить окон и переключаться между ними. Сессий тоже может быть много, и между ними тоже можно переключаться. Клиенты tmux сессий с разных tty могут работать в общей сессии. Если один из них сменит сессию, то она сменится только у него. Имя текущей сессии отображается слева внизу в квадратных скобках. Недостаток — непривычным становится скроллинг. Необходимо сперва войти в режим копирования (Ctrl+b PgUp)
УПРАВЛЕНИЕ
Делится на три типа: - Горячие клавиши после префикса Ctrl+b
- Внутренняя командная строка, вызываемая через Ctrl+b : (^b и двоеточие)
- Выполнение tmux с ключами
ГОРЯЧИЕ КЛАВИШИ
ctrl-b c создать новое окно ctrl-b $ переименовать сессию ctrl-b s Вывести список активных сессий ctrl-b w Вывести список активных окон (со всех сессий) ctrl-b ( перейти к предыдущей сессии ctrl-b ) перейти к следующей сессии ctrl-b n перейти к следующему окну ctrl-b p перейти к предыдущему окну ctrl+b 0...9 перейти к окну по номеру
ctrl+b % разделить окно на две панели по вертикали ctrl+b " разделить окно на две панели по горизонтали ctrl+b x закрыть панель ctrl+b & закрыть окно
ctrl+b курсор перемещение между субокнами (можно забиндить в конфиге hjkl в стиле vim) ctrl+b Ctrl + курсор изменения размера текущего субокна на знакоместо ctrl+b Alt + курсор изменения размера текущего субокна на пять знакомест
ctrl+b alt+u , Перезагрузка переменных (TMUX environment reload)
Режим копирования и скроллинг:
Ctrl+b PgUp вход в режим копирования, после чего PgUp/PgDn и стрелки — скроллинг вверх и вниз, q - выход. Ctrl+b z zoom текущей панели на весь экран и обратно. Удобно копипастить мышью. Ctrl+b d отключиться от текущей сессии. Ctrl+b I (пере)установить плагины
Выделение и копирование во внутренний буфер:
ctrl+b [ Перейти в режим копирования ctrl+пробел выделяем то что хотим копировать alt+w помещаем скопированное в буфер ctrl + b ] достаем из буфера
Выделение мышью: После
выделения, когда вы отпускаете кнопку мыши, выделенный текст копируется
во внутренний буфер обмена tmux. Затем вы можете вставить этот текст,
используя Ctrl+B ].
ВНУТРЕННЯЯ КОМАНДНАЯ СТРОКА
:new # создать новую сессию :new -s name # создать новую сессию name :rename newname # переименовать сессию в newname :source ~/.tmux.conf # перечитать конфиг :source-file ~/.tmux.conf :rotate-window # циклически перемещать содержимое по субокнам
КЛЮЧИ TMUX
man tmux # Документацияtmux list-commands # Список поддерживаемых комманд tmux list-clients # Вывести список подключённых клиентов tmux # без параметров будет создана сессия 0 tmux new -s name # создать новую сессию name tmux new -s name -d # создать новую сессию name изнутри сеанса tmux # без -t будет ошибка: sessions should be nested with care, unset $TMUX to force tmux new-session -c /path/to -s name # создать сессию name с текущим путём по умолчанию /path/to
tmux ls # вывести список активных сессий tmux attach # Подключение к единственной, либо последней созданной сессии tmux attach -t name # Подключение к сессии name tmux detach # отключение от сессии tmux kill-server # удалить все сессии tmux kill-session -t name # удалить сессию name tmux switch-client -t name # Переключиться к сессии name tmux source ~/.tmux.conf # перечитать конфиг
Вкусности:
tmux attach || tmux new # Сперва пытаетесь подключиться к уже существующему серверу tmux, если он существует. Если такого ещё нет — создаёте новый. tmux has-session -t hermit && tmux attach-session -t hermit # подключиться к сессии hermit, если она существует. # Послать на второе субокно последовательность нажатий клавиш: # https://blog.damonkelley.me/2016/09/07/tmux-send-keys/tmux send-keys -t 1 "# Wake up, Neo!" Enter # панели можно указывать относительно: tmux send-keys -t bottom-left "# Wake up, Neo!" Enter # послать в последнюю активную панель: tmux send-keys -t ! "# Wake up, Neo!" Enter
КОНФИГ ~/.tmux.conf:
set -g default-terminal "screen-256color" set -g history-limit 20000
setw -g mouse on
bind h select-pane -L bind j select-pane -D bind k select-pane -U bind l select-pane -R
bind -r H resize-pane -L 10 bind -r J resize-pane -D 10 bind -r K resize-pane -U 10 bind -r L resize-pane -R 10
bind -n C-k send-keys -R C-l \; clear-history
Последняя строка позволяет очистить доступную по PgUp историю окна. Сперва модификатор Ctrl+b, затем вызов clear-history по Ctrl+k
Пример практического использования tmux: Делим терминал на два окна по вертикали. В левом запускается редактор vim с
исходником test.py на Python, в правом запускается скрипт на bash
автоматически выполняющий test.py при изменении даты его сохранения. Bash
скрипт вводить в одну строку! В результате в левом окне пишется код,
при каждом его сохранении в правом он автоматически исполняется: n="test.py"; while true; do inotifywait -qqe close_write $n; pkill -f 'python3 $n'; clear; python3 $n; done
|