tmux: мультиплексор терминалов

tmux — свободная консольная утилита-мультиплексор предоставляющая пользователю доступ к нескольким терминалам в рамках одного экрана. tmux может быть отключен от экрана: в этом случае он продолжит исполняться в фоновом режиме; имеется возможность вновь подключиться к tmux находящемуся в фоне. wiki

Долго и продуктивно использовал screen но последнее время мне стало не хватать удобного переключения между вертикальным/горизонтальным расположением терминалов (сплиттинг) в отдельном окне и запуска определенных приложений при первом запуске screen. Если второе и решается то для первого нужно пересобрать screen из репозитария screen и насколько я знаю screen разбивает на регионы всю свою область а не отдельно для каждого окна (таба).

Одни поговаривают что у tmux'a более читаемый конфиг чем у screen'а (большой разницы не заметил) а другие говорят что tmux меньше потребляет памяти хотя это больше индивидульно приведу свои замеры screen с 5 окнами отёл ~11 МБайт а tmux - ~5.6 МБайт (запущены примерно одни и те жи приложения).

Сравнения screen vs tmux:

Среди других особенностей tmux'a выделяют

  • клиент-серверная архитектура;
  • регионы (под окна) можно перемещать изменять размеры в пределах активного окна;
  • возможность отображения вывода команды в строке статуса;
  • поддержка UTF-8 и 256 цветов;
  • управление с помощью vi или emacs шорткатов;

В репозитариях ubuntu доступна последняя версия (на данный момент 1.5)

sudo apt-get install tmux

Или можно собрать из исходников

sudo apt-get install libncurses5-dev binutils gcc gcc-4.4 libc-dev-bin libc6-dev libgomp1 libncurses5-dev 
linux-libc-dev manpages-dev libevent-1.4-2 libevent-core-1.4-2 libevent-extra-1.4-2 libevent-dev checkinstallwget http://downloads.sourceforge.net/tmux/tmux-1.5.tar.gztar xvvf tmux-1.5.tar.gzcd tmux/./configure --prefix=/usrmakesudo checkinstall

При запуске с настройками по-умолчанию будет включена строка статуса (в screen'e её нет) префикс для комбинаций клавиш - ctrl+b (вместо ctrl+a как в screen). Сравнительную таблицу с комбинациями клавиш в tmux и screen можно посмотреть тут или список команд на русском для tmux тут. Для просмотра доступных клавиш из tmux'a нажмите ctrl+b ?.

В терминах tmux сессия - это совокупность псевдо-терминалов находящихся под управлением tmux''а. К каждой сессии привязаны одно или более окон которое в свою очередь могут делиться на фреймы (регионы слои под окна - столько разных названий можно встретить на разных форумах/блогах/etc).

Список запущенных сессий можно просмотреть с помощью

tmux ls

Присоединиться к сессии с именем 0

tmux attach -t 0

Список всех поддерживаемых команд

tmux list-commands

Для конфигурирования tmux используется две команды:

  • set-option - предназначена для изменения параметров сессии (список всех опций - tmux show-options -g);
  • set-window-option - предназначена для изменения настроек окон (список всех опций - tmux show-window-options -g);

Мой ~/.tmux.conf: префикс для клавишных комбинаций - ctrl+a vi-подобное управление. Для разделения окна на два равных региона по вертикали использую ctrl+a+v по горизонтали - ctrl+a+h для циклического переключения по регионам - ctrl+a+o смена расположения регионов - ctrl+a+Space часы - ctrl+a+t.

tmux

Если в vim или другом приложении отображаются не правильно цвета то добавим в ~/.zshrc (или ~/.bashrc) следующий алиас для принудительного использования 256 цветов:

alias tmux="tmux -2 -u"

Для запуск определенных приложений/действий при первом запуске tmux напишем скрипт который создает сессию с именем work (запускается в фоне (ключ -d)) с тремя окнами. В первом окне запускается top во втором - переходим в директорию ~/projects/ а третье окно пустое. Принудительно активируем первое окно и активируем сессию work.

#!/bin/bashtmux new-session -d -s worktmux new-window -t work:1tmux new-window -t work:2tmux new-window -t work:3tmux send-keys -t work:1 'top' C-mtmux send-keys -t work:2 'cd ~/projects/' C-mtmux select-window -t work:1tmux -2 attach-session -t work

Еще одно удобство - запуск выше приведённого скрипта при первом запуске шела или присоединение к уже запущенной сессии. Для этого добавим в ~/.zshrc (или в ~/.bashrc)

if [ $TERM != "screen-256color" ] && [  $TERM != "screen" ]; then    tmux attach -t work || ~/scripts/tmux_work.sh; exitfi

Для отсылки команд из vim в tmux есть плагин tslime демонстрацию использования смотрим тут.

Обновить конфиг можно нажав ctrl+a : и набрав source-file ~/.tmux.conf.

Узнать текущий binding (emacs или vi) - tmux show-options -g | grep keys.

Если используется zsh + tmux и перестал работать поиск по истории по ctrl+r то добавляем в ~/.zshrc

export EDITOR=vibindkey -e

Дополнительное чтиво


Оригинал статьи http://proft.me/2011/11/22/tmux-multipleksor-terminalov/

0 комментариев

Оставить комментарий