Tmux: майстер-клас з налаштування для продуктивної розробки на macOS

Tmux: майстер-клас з налаштування для продуктивної розробки на macOS

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.

Це і є та сама продуктивність на кінчиках пальців.

Коментарі (0)

Залишити коментар

Напишіть мені
Будь ласка, заповніть форму нижче, щоб розпочати спілкування зі мною.

Цей сайт захищено reCAPTCHA. Застосовуються Політика конфіденційності та Умови використання Google.