lenec ru

← все посты

tmux для разработчика: продуктивная работа в терминале без потерь сессий

13K

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.

Комментарии 0

  • Будьте первым, кто оставит комментарий.

Войдите, чтобы оставить комментарий.