Tmux: современная минималистичная Zen-конфигурация
Table of contents

Tmux: must-have для работы в терминале
С тех пор, как я увлекся UNIX-подобными ОС, я живу в терминале. Независимо от того, занимаюсь конфигурированием сервера или написанием скрипта, терминал был моим основным рабочим пространством. Всегда после запуска ноутбука первым делом запускаю терминал. Хотя я и провожу в нем достаточно много времени, я никогда по-настоящему не использовал tmux. Вместо этого всегда хватало запускать несколько окон терминала и работать, переключая фокус между ними. Для простого рабочего процесса этого было достаточно.
Я долго не хотел использовать tmux, чтобы улучшить рабочий процесс. Попросту не хотелось изучать новый инструмент и добавлять лишний слой сложности, так как я не осознавал всех преимуществ этой утилиты. Ну и несколько окон терминала отлично справлялись со всеми задачами.
Но со временем из-за нестабильного интернета, разрывов и потерь SSH-сессий, я решил все-таки попробовать tmux. И это решение полностью изменило мой подход к работе в терминале.
Теперь каждый раз когда я открываю новый терминал я могу сделать несколько вкладок, разделить окно вертикально и горизонтально так, как мне хочется. А возможность отключаться и подключаться к созданной сессии делает рабочий процесс намного эффективнее.
Можно больше не беспокоится о потери прогресса выполнения каких-либо задач при переключении между компьютерами или перезагрузке - я могу продолжить работу с того места, где остановился.
Для DevOps-инженера или разработчика это просто must-have утилита которая должна быть в его арсенале. 👍
Он легкий, просто настраивается и беспроблемно работает на разных операционных системах.
Установка Tmux
Установка tmux - это простой процесс, и есть два основных способа установить его в систему:
- Использовать пакетный менеджер(быстро и просто)
- Собрать из исходников(сложнее, но можно получить самую свежую версию)
Установка через пакетный менеджер
Ubuntu/Debian
sudo apt install tmuxХотя этот метод обеспечивает быструю и бесcпроблемную установку, предоставленная версия может не всегда быть последней, так как репозитории пакетов часто отстают от официальных обновлений tmux.
macOS
brew install tmuxСборка tmux из исходников
Установка зависимостей
Ubuntu/Debian
sudo apt update
sudo apt install -y git automake bison build-essential \
pkg-config libevent-dev libncurses5-devmacOS
brew install autoconf automake pkg-config libevent ncursesКлонируем репозиторий tmux
git clone https://github.com/tmux/tmux.git
cd tmuxСборка и установка
sh autogen.sh
./configure && make
sudo make installПроверяем версию
tmux -V
Создаем tmux.conf
tmux.conf — это файл конфигурации для tmux, который позволяет настраивать поведение, комбинации клавиш, внешний вид и другие параметры.
Создать его нужно по одному из путей:
- ~/.tmux.conf
- ~/.config/tmux/tmux.conf
Основные параметри
Для лучшей поддержки цветов
set -g default-terminal "xterm-256color"
set-option -ga terminal-overrides ",xterm-256color:Tc"
set -ag terminal-overrides ",xterm-256color:RGB"Переназначаем префикс на Ctrl + A . По умолчанию Ctrl + B
set -g prefix C-aПоддержка мыши
set -g mouse onИнтеграция с системным буфером обмена
set-option -g set-clipboard onВключение vim мода
set -g mode-keys viИзменяем нумерацию windows и panes что бы она начиналась с 1, по умолчанию с 0, что для многих пользователей неудобно.
set -g base-index 1
setw -g pane-base-index 1Релоад конфига prefix + r
bind r source-file ~/.config/tmux.conf \; display "Reloaded!"Подключаем менеджер плагинов (TPM)
https://github.com/tmux-plugins/tpm
Клонируем репозиторий
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpmИ добавляем в конфигурацию
### List plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
### Init TPM
run '~/.tmux/plugins/tpm/tpm'Полностью моя минимальная конфигурация выглядит так:
tmux.conf
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'niksingh710/minimal-tmux-status'
set -g @minimal-tmux-bg "#6272A4"
set -g default-terminal "xterm-256color"
set-option -ga terminal-overrides ",xterm-256color:Tc"
set -ag terminal-overrides ",xterm-256color:RGB"
set -g mouse on
set-option -g set-clipboard on
set -g mode-keys vi
# Set prefix
set -g prefix C-a
# Change index
set -g base-index 1
setw -g pane-base-index 1
# Init Tmux Plugin Manager
run '~/.tmux/plugins/tpm/tpm'Для применения измененных параметров на лету, без перезапуска tmux, можно воспользоваться командой source-file.
Для этого нажимаем префикс который задан в конфигурации. В нашем случае это Ctrl + A потом : и попадаем в командный режим.
:source-file ~/.config/tmux/tmux.confДобавление плагинов
- Добавляем новый плагин в
~/.tmux.confпо типуset -g @plugin '...' - Нажимаем
prefix + Iдля скачивания плагина.
Плагин будет клонирован в директорию ~/.tmux/plugins/ и подключен.
Удаление плагинов
- Удаляем или комментируем плагин.
- Нажимаем
prefix + alt + uдля удаления.
Все плагины устанавливаются в директорию ~/.tmux/plugins/. При желании их можно удалить вручную.

Основные команды
Управление сессиями:
- Создать сессию:
tmux new -s [name] - Список сессий:
tmux lsилиPrefix + sкогда Tmux запущен - Подключится к сессии:
tmux attach -t [name] - Предпросмотр окон для всех сессий:
Prefix + w
Управление окнами:
- Создать окно:
Prefix + c - Переименовать окно:
Prefix + , - Переключится на окно с номером:
Prefix + [number] - Следующее/предыдущее окно:
Prefix + n/Prefix + p - Заменить окно:
Prefix + :swap-window -t [target] - Закрыть окно:
Prefix + &
Управление пейнами:
- Разделить горизонтально:
Prefix + % - Разделить вертикально:
Prefix + " - Переключение между panes:
Prefix + [arrow key] - Заменить panes:
Prefix + {orPrefix + } - Показать номера pane:
Prefix + q(then press the number to select) - Развернуть pane:
Prefix + z - Закрыть pane:
Prefix + x
Скрипт запуска сессии
Также можно создать скрипт для запуска tmux сразу с несколькими окнами и разделенными как нужно, в которых будет что то запущено.
session.sh
#!/usr/bin/env bash
SESSION="default"
tmux has-session -t $SESSION 2>/dev/null
if [ $? != 0 ]; then
tmux new-session -d -s $SESSION
tmux new-window -t $SESSION:1
tmux new-window -t $SESSION:2 -n "Ansible"
tmux new-window -t $SESSION:3 -n "k8s"
tmux split-window -v -t $SESSION:3
tmux send-keys -t $SESSION:3.1 'ssh user@server' C-m
tmux send-keys -t $SESSION:3.2 'ssh user@server' C-m
tmux split-window -h -t $SESSION:3.2
tmux send-keys -t $SESSION:3.3 'ping 1.1.1.1' C-m
tmux new-window -t $SESSION:4 -n "dev"
tmux split-window -v -t $SESSION:4
tmux send-keys -t $SESSION:4.1 'podman start container' C-m
tmux send-keys -t $SESSION:4.2 'tail -F /var/log/some.log' C-m
fi
tmux attach -t $SESSIONМного всяких тем, конфигураций, плагинов и кучу всего полезного можно найти в этом репозитории
https://github.com/rothgar/awesome-tmux