Первые полчаса с tmux всегда одинаковые: Ctrl+C ничего не копирует, Ctrl+V ничего не вставляет, выделение мышью исчезает. Это не баги — это архитектура. tmux хранит скопированное в собственном буфере, изолированном от системы. Как только понимаешь эту логику — всё встаёт на место.
Два буфера которые не видят друг друга
Когда вы копируете текст в браузере или редакторе — он попадает в системный clipboard (X11 на Linux, Pasteboard на macOS). tmux не знает об этом буфере ничего.
Когда вы копируете текст внутри tmux — он попадает в paste buffer tmux. Это отдельное хранилище которое не связано с системным clipboard.
Именно поэтому текст скопированный в tmux не вставляется в браузер. И текст из браузера не вставляется через Ctrl+b ]. Для синхронизации нужна явная настройка — о ней в конце.
Включить vi-режим навигации
По умолчанию в copy-mode работают emacs-клавиши. Переключиться на vi — добавить в ~/.tmux.conf:
set-window-option -g mode-keys vi
Применить сразу без перезапуска tmux:
Ctrl+b :source-file ~/.tmux.conf
Войти в copy-mode и выделить текст
Войти в copy-mode:
Ctrl+b [
Курсор стал активным — теперь можно перемещаться по истории вывода. Начать выделение:
Space
Переместить курсор к концу нужного фрагмента. Скопировать в буфер tmux и выйти:
Enter
Вставить в текущую панель:
Ctrl+b ]
Навигация в copy-mode: таблица
| Клавиша | Действие |
|---|---|
h j k l |
Движение по символам и строкам |
w / b |
Слово вперёд / назад |
0 / $ |
Начало / конец строки |
G |
Конец буфера (самый свежий вывод) |
g g |
Начало буфера |
Ctrl+u / Ctrl+d |
Пол-экрана вверх / вниз |
/ + текст + Enter |
Поиск вниз |
? + текст + Enter |
Поиск вверх |
n / N |
Следующее / предыдущее совпадение |
q |
Выйти из copy-mode |
Прямоугольное выделение
Выделять не построчно а блоком колонок — полезно для таблиц и выровненного вывода:
Войти в copy-mode, затем начать прямоугольное выделение:
Ctrl+v
Двигать курсор стрелками или hjkl, затем скопировать:
Enter
История буферов
tmux не хранит один скопированный фрагмент — он накапливает историю. Посмотреть все буферы:
tmux list-buffers
Вывести содержимое последнего:
tmux show-buffer
Вставить из конкретного буфера по номеру:
tmux paste-buffer -b 0
Сохранить буфер в файл — удобно когда нужно вытащить длинный вывод команды:
tmux save-buffer ~/output.txt
Синхронизация с системным clipboard: Linux
Чтобы Enter в copy-mode одновременно копировал и в буфер tmux и в X11 clipboard — добавить в ~/.tmux.conf:
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
Установить xclip если ещё нет:
sudo apt install xclip
Альтернатива через xsel:
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xsel --clipboard --input"
Синхронизация с системным clipboard: macOS
На macOS xclip не нужен — есть встроенный pbcopy:
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "pbcopy"
Мышь: выделение без copy-mode
Включить мышь:
set -g mouse on
Теперь выделение мышью автоматически копирует в буфер tmux. При отпускании кнопки — текст в буфере.
Проблема: с включённой мышью прокрутка терминала перехватывается tmux, приложения вроде less перестают прокручиваться нативно. Обойти — зажать Shift при выделении. Тогда мышь работает в режиме терминала минуя tmux.
Вставить текст из системного clipboard в tmux
Скопировали снаружи (браузер, другое приложение) — вставить в tmux:
На Linux:
Shift+Insert
Или сочетание вашего терминального эмулятора: Ctrl+Shift+V в большинстве.
На macOS в iTerm2 или Terminal.app:
Cmd+V
Готовая конфигурация
Весь блок для ~/.tmux.conf — vi-режим, мышь, синхронизация с clipboard через y и через мышь:
set-window-option -g mode-keys vi
set -g mouse on
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-pipe "xclip -selection clipboard -i"
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
v — начать выделение как в vim. y — скопировать не выходя из copy-mode. Enter — скопировать и выйти. MouseDragEnd1Pane — мышь тоже отправляет в clipboard.
Для macOS: заменить xclip -selection clipboard -i на pbcopy.
Шпаргалка
| Задача | Клавиши / команда |
|---|---|
| Войти в copy-mode | Ctrl+b [ |
| Начать выделение | Space |
| Прямоугольное выделение | Ctrl+v |
| Скопировать и выйти | Enter |
| Вставить из буфера | Ctrl+b ] |
| Список всех буферов | tmux list-buffers |
| Содержимое буфера | tmux show-buffer |
| Сохранить буфер в файл | tmux save-buffer ~/out.txt |
| Вставить буфер №0 | tmux paste-buffer -b 0 |
| Поиск вниз в copy-mode | /текст + Enter |
| Выйти из copy-mode | q |