time

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 checkinstall wget http://downloads.sourceforge.net/tmux/tmux-1.5.tar.gz tar xvvf tmux-1.5.tar.gz cd tmux/ ./configure --prefix=/usr make sudo 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/bash

tmux new-session -d -s work

tmux new-window -t work:1
tmux new-window -t work:2
tmux new-window -t work:3
tmux send-keys -t work:1 'top' C-m
tmux send-keys -t work:2 'cd ~/projects/' C-m

tmux select-window -t work:1
tmux -2 attach-session -t work

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

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

Для отсылки команд из 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=vi
bindkey -e

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

blog comments powered by Disqus