tmux для разработчика: продуктивная работа в терминале без потерь сессий
SSH-соединение оборвалось — и ваш долгий процесс умер вместе с терминалом. Знакомо? tmux решает эту проблему раз и навсегда: сессии живут на сервере независимо от подключения. Но tmux — это не только persistent sessions. Это полноценная среда для работы с несколькими проектами, логами и серверами одновременно.
Зачем tmux
Три главные причины:
- Persistent sessions — отключились от SSH, закрыли ноутбук, потеряли Wi-Fi — процессы продолжают работать. Подключаетесь обратно и видите всё как было.
- Multi-pane layout — код слева, логи справа, shell внизу. Без переключения между вкладками.
- Воспроизводимость — скрипт создаёт нужный layout за секунду. Одна команда — и рабочее окружение готово.
Базовые концепции: session, window, pane
Иерархия tmux:
- Session — верхний уровень. Один проект = одна сессия.
- Window — вкладка внутри сессии. Аналог табов в терминале.
- Pane — разделение окна на части (split).
# Создать сессию
tmux new -s backend
# Отключиться (detach) — сессия продолжает жить
# Ctrl+b, d
# Список сессий
tmux ls
# Подключиться обратно
tmux attach -t backend
# Новое окно (window)
# Ctrl+b, c
# Переключение между окнами
# Ctrl+b, 0-9 или Ctrl+b, n/p
# Разделить по горизонтали / вертикали
# Ctrl+b, % (вертикально)
# Ctrl+b, " (горизонтально)
# Навигация между panes
# Ctrl+b, стрелки
# Закрыть pane
# Ctrl+d или exit
Конфиг .tmux.conf
Дефолтный tmux неудобен. Минимальный конфиг для комфортной работы:
# ~/.tmux.conf
# Prefix: Ctrl+a вместо Ctrl+b (ближе к мизинцу)
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# Мышь: скролл, выделение, ресайз panes
set -g mouse on
# Vi-mode для копирования
setw -g mode-keys vi
bind -T copy-mode-vi v send -X begin-selection
bind -T copy-mode-vi y send -X copy-pipe-and-cancel "xclip -sel clip"
# Разделение panes: | и -
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
# Навигация между panes: Alt+стрелки (без prefix)
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
# Нумерация окон с 1
set -g base-index 1
setw -g pane-base-index 1
# 256 цветов + true color
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",xterm-256color:RGB"
# История: 50000 строк
set -g history-limit 50000
# Status bar
set -g status-style "bg=#1e1e2e,fg=#cdd6f4"
set -g status-right "#H | %H:%M"
После изменения конфига: tmux source-file ~/.tmux.conf или Ctrl+a, : → source-file ~/.tmux.conf.
Плагины: tpm, resurrect, continuum
TPM (Tmux Plugin Manager) — менеджер плагинов:
# Установка TPM
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
# В .tmux.conf:
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
# Установить плагины: Ctrl+a, I
# tmux-resurrect: сохранение/восстановление сессий
# Ctrl+a, Ctrl+s — сохранить
# Ctrl+a, Ctrl+r — восстановить
# tmux-continuum: автосохранение каждые 15 минут
set -g @continuum-restore 'on'
run '~/.tmux/plugins/tpm/tpm'
tmux-resurrect сохраняет layout, рабочие директории и даже запущенные программы. После ребута сервера — одна команда и всё на месте.
Workflow: IDE-like layout для backend
Скрипт для создания рабочего окружения:
#!/bin/bash
# dev-session.sh — создаёт layout для backend-разработки
SESSION="backend"
PROJECT="$HOME/projects/orders-api"
tmux new-session -d -s $SESSION -c $PROJECT
# Окно 1: редактор + логи
tmux rename-window -t $SESSION:1 "code"
tmux send-keys -t $SESSION:1 "nvim ." Enter
tmux split-window -h -t $SESSION:1 -c $PROJECT
tmux send-keys "tail -f logs/app.log" Enter
tmux resize-pane -t $SESSION:1.2 -x 60
# Окно 2: сервер + тесты
tmux new-window -t $SESSION -n "run" -c $PROJECT
tmux send-keys "go run ./cmd/server" Enter
tmux split-window -v -t $SESSION:2 -c $PROJECT
tmux send-keys "# go test ./..." Enter
# Окно 3: git + shell
tmux new-window -t $SESSION -n "git" -c $PROJECT
# Фокус на первое окно
tmux select-window -t $SESSION:1
tmux attach -t $SESSION
Альтернативы: zellij, screen
- screen — предшественник tmux. Работает, но хуже: нет вертикального split (в старых версиях), сложный конфиг, меньше возможностей. Используйте только если tmux недоступен.
- zellij — современная альтернатива на Rust. Плюсы: встроенные подсказки клавиш, WebAssembly-плагины, floating panes. Минусы: менее зрелая экосистема, нет аналога resurrect, потребляет больше памяти.
tmux — стандарт индустрии. Огромная экосистема, работает везде, конфигурируется под любой workflow. Потратьте час на настройку .tmux.conf — и терминал станет полноценной IDE, которая переживёт любой disconnect.