linux

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.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s