Tmux: Термінальний мультиплексор, без якого неможливо уявити розробку (Apple Guide)
Коли ти працюєш над складними Fullstack-проєктами на Next.js та Django, твій термінал — це пульт управління польотами. Тобі потрібно одночасно бачити логи сервера, запущені Docker-контейнери, відкритий Neovim та консоль бази даних.
Відкривати десяток різних вікон емулятора термінала — це хаос і біль при перезавантаженні системи. Вихід? Tmux.
Навіщо потрібен tmux і який з нього профіт?
Tmux (Terminal Multiplexer) — це програма, яка дозволяє всередині одного вікна термінала створювати безліч вкладок (вікон) та ділити їх на панелі (спліти).
Але головний його профіт і "кілер-фіча" — це сесії. Уяви: ти працюєш, у тебе розбитий екран на 4 панелі, запущено pnpm dev, відкрито lazydocker та підключено по SSH до VPS. Раптом ти випадково закриваєш термінал (Ghostty чи iTerm). Твоя реакція без tmux: паніка, треба все запускати наново. Твоя реакція з tmux: відкриваєш термінал, пишеш tmux attach — і бачиш усе своє робоче середовище рівно в тому стані, в якому ти його залишив, аж до курсора.
Крок 1: Базове встановлення
Встановлюється tmux елементарно через Homebrew:
Bash
brew install tmux
Щоб комфортно працювати з плагінами (наприклад, для гарної теми чи автозбереження сесій), одразу ставимо офіційний менеджер плагинів (TPM):
Bash
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
Крок 2: Ідеальний конфіг .tmux.conf
Tmux "з коробки" виглядає страшно, а його дефолтний префікс (комбінація клавіш, з якої починаються всі команди) — це Ctrl+b. Ми це виправимо.
Створи файл ~/.tmux.conf та скопіюй туди мій конфіг. Він заточений під швидкість, має префікс Ctrl+a (як у про-розробників), підтримує мишу і візуально оформлений у шикарну тему Catppuccin.
Фрагмент коду
# =========================================================
# TERMINAL (БАЗОВІ НАЛАШТУВАННЯ ТЕРМІНАЛА)
# =========================================================
# Встановлюємо підтримку 256 кольорів. Критично важливо для тем (наприклад, Catppuccin).
set -g default-terminal "screen-256color"
# Вмикаємо підтримку True Color (RGB). Без цього Neovim може спотворювати кольори.
set -as terminal-features ',xterm-256color:RGB'
# Прибираємо затримку при натисканні ESC. Робить вихід з insert mode у Vim миттєвим.
set -s escape-time 0
# Дозволяє програмам всередині tmux (Neovim) розуміти, коли вікно отримує або втрачає фокус.
set -g focus-events on
# Збільшуємо ліміт історії до 100 000 рядків. Зручно для логів Docker або pnpm.
set -g history-limit 100000
# tmux буде підлаштовувати розмір вікна під активний клієнт.
set -g aggressive-resize on
# Дозволяємо надсилати текст безпосередньо в системний буфер обміну macOS (pbcopy).
set -g set-clipboard on
# =========================================================
# PREFIX (ОСНОВНИЙ ПРЕФІКС)
# =========================================================
# Змінюємо стандартний префікс Ctrl+b на Ctrl+a (швидше та ергономічніше).
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# =========================================================
# INDEXES & WINDOWS (ІНДЕКСАЦІЯ ТА ВІКНА)
# =========================================================
# Починаємо нумерацію вікон та панелей з 1, а не з 0.
set -g base-index 1
setw -g pane-base-index 1
# Автоматично перенумеровувати вікна, якщо одне з них було закрито.
set -g renumber-windows on
# =========================================================
# UI / MOUSE (ІНТЕРФЕЙС ТА МИША)
# =========================================================
# Вмикаємо підтримку миші (дозволяє виділяти текст, змінювати розмір панелей, скролити).
set -g mouse on
# 's' для відкриття списку сесій (відкриває дерево на весь екран і сортує за алфавітом).
bind s choose-tree -sZ -O name
# =========================================================
# WINDOW MANAGEMENT (УПРАВЛІННЯ ВІКНАМИ)
# =========================================================
# Відкриття нових вікон у поточній директорії проєкту (а не в ~).
bind c new-window -c "#{pane_current_path}"
# Швидке переміщення вікон (вкладок) вліво і вправо (Shift + Стрілки).
bind -n S-Left swap-window -t -1 \; previous-window
bind -n S-Right swap-window -t +1 \; next-window
# Від'єднання та приєднання панелей (Join / Break Pane).
bind j choose-window 'join-pane -h -s "%%"'
bind J break-pane -d
# =========================================================
# SPLITS (РОЗДІЛЕННЯ ЕКРАНА / ПАНЕЛІ)
# =========================================================
unbind %
unbind '"'
# Вертикальний спліт ('|'). Відкривається в поточній директорії.
bind | split-window -h -c "#{pane_current_path}"
# Горизонтальний спліт ('-'). Відкривається в поточній директорії.
bind - split-window -v -c "#{pane_current_path}"
# =========================================================
# RESIZE (ЗМІНА РОЗМІРУ ПАНЕЛЕЙ)
# =========================================================
# Змінюємо розмір панелей за допомогою Vim-клавіш (h, j, k, l).
bind -r h resize-pane -L 5 # Розширити вліво
bind -r j resize-pane -D 5 # Розширити вниз
bind -r k resize-pane -U 5 # Розширити вгору
bind -r l resize-pane -R 5 # Розширити вправо
# Клавіша 'm' для максимізації поточної панелі (Zoom).
bind -r m resize-pane -Z
# Швидкий стрибок на попереднє активне вікно (аналог Alt-Tab).
bind Tab last-window
# =========================================================
# RELOAD CONFIG (ПЕРЕЗАВАНТАЖЕННЯ КОНФІГУ)
# =========================================================
# 'r' на перезавантаження конфігу на льоту.
unbind r
bind r source-file ~/.tmux.conf \; display-message "tmux.conf reloaded!"
# =========================================================
# COPY MODE (РЕЖИМ КОПІЮВАННЯ В СТИЛІ VIM)
# =========================================================
# Вмикаємо управління в режимі копіювання як у Vim.
setw -g mode-keys vi
bind-key -T copy-mode-vi v send -X begin-selection
bind-key -T copy-mode-vi y send -X copy-selection-and-cancel \; display-message "Copied"
# Вимикаємо скидання виділення при відпусканні кнопки миші.
unbind -T copy-mode-vi MouseDragEnd1Pane
# =========================================================
# 🔥 PRO WORKFLOW BINDINGS
# =========================================================
# Швидке створення нової сесії.
bind C-c command-prompt -p "Ім'я нової сесії:" "new-session -A -s '%%'"
# Швидкий виклик lazygit у popup вікні (у центрі екрана).
bind g display-popup -E -w 90% -h 90% -d "#{pane_current_path}" "lazygit"
# Моніторинг ресурсів (btop).
bind H new-window -n "📊 System" "btop"
# Розумне SSH-підключення до серверів.
bind S command-prompt -p "SSH Host (наприклад, user@ip):" "new-window -n '🌐 %1' 'ssh %1'"
# Плаваючий Scratchpad (Швидка консоль).
bind Space display-popup -E -w 80% -h 80% -d "#{pane_current_path}" "$SHELL"
# Синхронізація панелей (Режим "Broadcast").
bind * set-window-option synchronize-panes \; display-message "Синхронізація: #{?pane_synchronized,УВІМК,ВИМК}"
# =========================================================
# TPM PLUGINS (МЕНЕДЖЕР ТА ПЛАГІНИ)
# =========================================================
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'christoomey/vim-tmux-navigator'
# Catppuccin Theme
set -g @plugin 'catppuccin/tmux'
set -g @catppuccin_flavor 'mocha'
# Збереження сесій
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-restore 'on'
set -g @resurrect-capture-pane-contents 'on'
set -g @resurrect-save-file '~/.tmux/resurrect'
# Утиліти
set -g @plugin 'omerxx/tmux-sessionx'
set -g @sessionx-bind 'O'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'laktak/extrakto'
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
set -g @plugin 'sainnhe/tmux-fzf'
set -g @plugin 'fcsonline/tmux-thumbs'
set -g @plugin 'tmux-plugins/tmux-open'
set -g @plugin 'tmux-plugins/tmux-battery'
set -g @plugin 'tmux-plugins/tmux-cpu'
set -g @plugin 'joshmedeski/tmux-which-key'
# Ініціалізація TPM
run '~/.tmux/plugins/tpm/tpm'
# =========================================================
# CATPPUCCIN STATUS BAR OVERRIDE (КАСТОМІЗАЦІЯ)
# =========================================================
set -g status on
set -g status-interval 5
set -g status-position bottom
set -g status-justify left
set -g status-right-length 100
set -g status-left-length 100
set -g status-left ""
set -g pane-active-border-style fg=green
set -g pane-border-style fg=colour238
set -g status-right "#{E:@catppuccin_status_application}"
set -agF status-right "#{E:@catppuccin_status_cpu}"
set -agF status-right "#{E:@catppuccin_status_ram}"
set -ag status-right "#{E:@catppuccin_status_session}"
set -ag status-right "#{E:@catppuccin_status_uptime}"
set -agF status-right "#{E:@catppuccin_status_battery}"
run ~/.tmux/plugins/tmux-cpu/cpu.tmux
run ~/.tmux/plugins/tmux-battery/battery.tmux
Крок 3: Інсталяція плагінів (Магія prefix + I)
Після збереження конфігу відкрий tmux (введи в терміналі tmux). Далі натисни наш префікс Ctrl+a, відпусти його, і натисни велику I (Shift+i). Це запустить TPM, який завантажить усі плагіни зі списку.
Крок 4: Нюанс Apple M1 (Компіляція з вихідних кодів)
Архітектура Darwin_arm64 чіпів Apple Silicon іноді грає злий жарт із деякими плагінами. Наприклад, плагін tmux-thumbs (написаний на Rust для швидкого копіювання) часто не може підтягнути правильний бінарник під M1.
Якщо під час завантаження плагінів ти бачиш помилку встановлення бінарника для tmux-thumbs, тобі доведеться скомпілювати його власноруч. Це робиться дуже просто. Перейди до папки плагіна і запусти скрипт збірки:
Bash
cd ~/.tmux/plugins/tmux-thumbs
cargo build --release
(Для цього в системі має бути встановлений Rust: brew install rust).
Після цього все запрацює ідеально.
Підсумок
Ти отримав надпотужний інструмент. Спробуй натиснути Ctrl+a і потім Space — і перед тобою з'явиться швидкий плаваючий Scratchpad. Натисни Ctrl+a і g — вилетить меню lazygit. А після перезавантаження Mac сесії tmux відродяться самі завдяки tmux-resurrect.
Це і є та сама продуктивність на кінчиках пальців.
