Tmux - лучшая альтернатива screen

Довольно долго пытался пересесть с GNU Screen на tmux, но вот только сдерживало несколько вещей в нем.
На сайте проекта можно найти описание всех фич, я же опишу лишь те, которые для меня оказались самыми полезными.

  • Улучшенная модель отрисовки (да-да screen периодически подключивал)
  • Содержимое терминала не теряется, когда мып ользуемся редакторами (открыли vim, закрыли, история осталась а месте и можно прокрутить до нее)
  • Конфигурирование на лету

C-b

Ага. Это сочетание клавишь из vim.

Переключим tmux на работу с C-a

set-option -g prefix C-a

Задержка между контрольными клавишами C-b и непосредственным вводом команды (например n).

Решается просто

set -s escape-time 0

Сочетание клавиш для управления tmux внутри tmux

Бывает такое, что приходится внутри tmux запустить вложенную сессию tmux. Значит надо как-то пробросить этой вложенной сессии команды. Например C-a a command

bind-key a send-prefix

Начинаме считать окна с 1, а не 0

Это удобно, так как 0 находится где-то на отшибе. И к нему надо тянуться.

set -g base-index 1

Агрессивный ресайз терминалов

Дефолтно при подключении к сессии нескольких клиентов рамер окна выбирается по размеру самого маленького клиента. Это неинтересно. Поэтому позволим терминалу для каждого клиента иметь собственный размер.

setw -g aggressive-resize on

После завершения команды можно ввести другую команду не нажимая C-b

Для меня эта проблема была самой неприятно. Воспроизвести ее просто: нужно на готом tmux создать два региона.

C-b "

А затем переключаться между ними.

C-b Up Down Up Down

Вы заметите, что нажав один раз C-b, а потом быстро нажимая вверх-вниз окна переключаются.

Это неприятно когда пытаешься переключить вкладку и начать тут же вводить что-то.

За такое поведение отвечает repeat-time

repeat-time time  
 Allow multiple commands to be entered without pressing  
 the prefix-key again in the specified time milliseconds  
 (the default is 500). Whether a key repeats may be set  
 when it is bound using the -r flag to bind-key. Repeat  
 is enabled for the default keys bound to the resize-pane  
 command.

Можно отключить repeat для команд переключения между панелями и окнами просто переобъявив команду без флага -r. Например так:

bind-key Up select-pane -U

Но я же предпочитаю эту фичу отключить вовсе.

set-option -g repeat-time 0

Базовый ~/.tmux.conf

# C-b не подходит - так как используется в vim  
set-option -g prefix C-a  
bind-key C-a last-window

# Начинам нумерацию окон с 1  
set -g base-index 1

# Добавляем отзывчивости в реакции на команды  
set -s escape-time 0

# Отключаем ожидание дополнительных команд  
set-option -g repeat-time 0

# Или можно забиндить команды отдельно отключая repeat только для нужных  
#bind-key Up select-pane -U

# Цветовая схема  
set -g status-bg black  
set -g status-fg white  
set -g status-left ""  
set -g status-right "#[fg=green]#H"

# Ресайзим содержимое окна индивидуально для каждого клиента  
setw -g aggressive-resize on

# Позволим пробрасывать команды внутрь вложенной сессии tmux  
# при помощи C-a a <command>  
bind-key a send-prefix

# Мониторинг активности  
#setw -g monitor-activity on  
#set -g visual-activity on

# Пример использования команды оболочки в статусной строке  
#set -g status-right "#[fg=yellow]#(uptime | cut -d ',' -f 2-)"

# Подсвечиваем активное окно  
set-window-option -g window-status-current-bg green

За кадром осталось использование tmuxinator для запуска tmux c определенной заранее раскладкой окон.

Ну и еще про настройку можно почитать в Arch-wiki.