Tmux – установка и кастомизация + Nord theme
Приветствую!
В прошлой заметке📝 мы говорили про терминальные мультиплексоры и какие задачи они выполняют. В сегодняшней статье я продемонстрирую установку и кастомизацию самого популярного инструмента из данной категории – Tmux🪟. Как обычно, уже все выстрадано настроено, и для повторения подобного у вас, необходимо будет выполнить всего несколько команд🧑💻.
Присоединяйтесь к нашему каналу в телеграм: t.me/r4ven_me, уведомления о новых постах приходят туда в день публикации. А если у вас есть вопросы или просто желание пообщаться по тематике – заглядывайте в чат: t.me/r4ven_me_chat.
Демонстрация, приведенная в данной статье выполнялась в среде дистрибутива Linux Mint 22 с Tmux версии 3.4✍️.
Предисловие
Я очень люблю тему Nord❄️ от разработчиков Arcticicestudio⛄️ и предпочитаю оформлять свою систему и приложения в этой палитре😌. Tmux не стал исключением, поэтому для корректного и гармоничного отображения конфигурации, как у меня вам понадобятся:
- Любой моноширный иконочный Powerline шрифт⚡️.
- Например из проекта Nerd fonts. Я предпочитаю шрифт Hack Nerd Font Mono. Шрифт необходимо поместить по пути
/usr/share/fonts/
либо отдельно для пользователя в~/.local/share/fonts/
и применить его к терминалу.
- Например из проекта Nerd fonts. Я предпочитаю шрифт Hack Nerd Font Mono. Шрифт необходимо поместить по пути
- Любой эмулятор терминал🧑💻, с поддержкой TrueColor и темы Nord.
- Например Gnome-terminal или выпадающий (drop-down) терминал – Guake. По моему опыту, данная тема есть под любой популярный эмулятор терминала;
- (Опционально) Консольный редактор📝 с темой Nord.
- Например Vim/Neovim.
- (Опционально) Интерактивная командная оболочка💻.
- Например Zsh + Oh-My-Zsh с темой agnoster.
Для тех, кто только знакомится с Tmux кратко перечислю его сущности🧐:
- Сессия (session) – основная единица работы, содержащая окна и панели;
- Окно (window) – отдельный терминал в сессии;
- Панель (pane) – разделение окна на несколько терминалов (панелей);
- Команды (command) – инструкции для управления
tmux
; - Клавиша префикса (prefix) – клавиша для активации команд (по умолчанию
Ctrl-b
); - Состояние (state) – активные и неактивные окна и панели;
- Конфигурация (config) – настройки tmux, например в файле
~/.tmux.conf
или~/.config/tmux/tmux.conf
.
Можем приступать к установке.
Установка Tmux
Tmux почти всегда есть в стандартных репозиториях, а во многих дистрибутивах Linux он даже предустановлен👌.
Открываем терминал и выполняем:
sudo apt update && sudo apt install -y curl git xclip tmux
curl
– утилита для взаимодействия с web (понадобится для скачивания конфига);git
– система контроля версий и одноименная утилита для работы с git репозиториями (нужна для установки сторонних плагинов);xclip
– утилита управления буфером обмена в desktop системах Xorg, обычно предустановлена (если выполняете установку tmux на системе без gui, то ее можно не устанавливать);tmux
– сам терминальный мультиплексор;
Скачивание конфига и запуск
Теперь воспользуемся утилитой curl
, чтобы скачать файл конфигурации Tmux с моего GitHub😇 репозитория:
curl --create-dirs -fLo \
~/.config/tmux/tmux.conf \
https://raw.githubusercontent.com/r4ven-me/dots/main/.config/tmux/tmux.conf
Осталось только запустить Tmux😳. Первый запуск займет некоторое время⏳, т.к. будут скачиваться менеджер плагинов и далее сами плагины с помощью этого менеджера.
Конфигурация построена так, что при добавлении новых плагинов, во время запуска/перезапуска Tmux, они будут устанавливаться автоматически😌. Для установки плагинов вручную используйте
prefix+I
.
Для создания новой именованной сессии воспользуйтесь командой:
tmux new -s Work
Где:
new
– команда создания новой сессии;-s
– ключ для указания имени сессии;Work
– произвольное имя сессии.
Должно получиться примерно так:
Все😃 настройка завершена! теперь можно активно пользоваться:
Понравился мой конфиг Neovim? Можете с легкостью создать аналогичный по статье: Neovim – Установка и настройка редактора кода с элементами IDE всего в несколько команд.
А если у вас широкий монитор, то вообще 🔥🔥🔥!
Для выхода из tmux
без закрытия сессий отправьте команду dettach
специальной горячей клавишей: сперва нажмите сочетание клавиш так называемого префикса, по умолчанию это Ctrl+b
, а затем сразу же клавишу d
, сокращенно: prefix+d
.
Да, такой стиль горячих клавиш у Tmux🤷♂️. Сперва нажимается клавиша prefix
, а затем клавиша действия/команды. К такому способу нужно привыкнуть. Клавишу prefix
можно изменить в конфигурации. Но делать это не рекомендуется, чтобы сохранить универсальность🫠.
Для возврата к запущенной сессии воспользуйтесь командой:
tmux attach -t Work || tmux new -s Work
Где:
attach
– команда подключения к запущенной сессии;-t
– ключ для указания тега/имени существующей сессии;Work
– имя запущенной ранее нами сессии;||
– логическое “или” в контексте оболочки, другими словами, параметр контроля выполнения, который запустит следующую за ним команду в случае ошибки предыдущей.
Рекомендую сразу же создать удобный alias для вашей оболочки:
echo 'alias T="tmux attach -t Work || tmux new -s Work"' >> ~/.profile
source ~/.profile
Замените ~/.profile
на файл с параметрами подготовки вашего окружения оболочки при необходимости☝️.
Теперь подключаться к существующей сессии с именем Work можно просто по команде из одной буквы T
.
Описание конфигурации и обзор файла tmux.conf
Что дополняет/изменяет данная конфигурация
Общие настройки📖:
- включена поддержка 256 цветов:
screen-256color
; - включена поддержка TrueColor для более точного отображения цветов;
- окна нумеруются с 1, а не с 0 (
base-index 1
); - панели в окнах тоже нумеруются с 1 (
pane-base-index 1
); - лимит буфера истории увеличен до 10,000 строк для прокрутки терминала;
- включена мышь! можно щелкать для выбора окон, прокручивать вывод, изменять размер панелей, менять их местами, также доступен вызов контекстного меню через ПКМ;
- включено автоматическое обновление заголовков окон терминала;
- используются vi-стиль клавиш для работы в режиме копирования (
mode-keys vi
) и взаимодействия с командами tmux (status-keys vi
вызываетсяprefix+:
); - установлена Zsh как оболочка по умолчанию (замените на свою, если используется иная);
- установлена локаль
ru_RU.UTF-8
, чтобы корректно отображать русские символы.
Управление мышью🐁:
- Общие действия:
- двойной клик по строке статуса создает новое окно (
bind-key -n DoubleClick1Status new-window
);
- двойной клик по строке статуса создает новое окно (
- Если используется X11-сервер при работы с tmux:
- средняя кнопка мыши вставляет текст из системного буфера обмена (используется
xclip
); - после выделения текста с помощью мыши копирует текст в буфер обмена без очистки выделения;
- в режиме копирования(!) поддерживается выбор слова/строки по двойному/тройному клику:
- двойной клик ЛКМ: выделяет слово, копирует его в буфер обмена;
- тройной клик ЛКМ: выделяет строку, копирует её в буфер обмена;
- нажатие ЛКМ в режиме копирования отменяет текущее выделение;
- средняя кнопка мыши вставляет текст из системного буфера обмена (используется
- В других средах (если не используется X11):
- поведение схоже, но текст сохраняется только во внутренний буфер tmux, а не в системный.
Клавиатурные сочетания🎹:
Немного расширены некоторые сочетания клавиш. Подробнее смотрите далее: Пункт 6. Кастомные горячие клавиши Tmux.
Список плагинов📋:
tmux-plugins/tpm
– менеджер плагинов для tmux:- обеспечивает установку и управление другими плагинами;
tmux-plugins/tmux-sensible
– устанавливает оптимальные настройки tmux по умолчанию;arcticicestudio/nord-tmux
– устанавливает тему Nord для tmux;tmux-plugins/tmux-resurrect
– сохраняет состояние сессий (окна, панели, запущенные процессы) и позволяет восстанавливать сессии после перезапуска tmux;tmux-plugins/tmux-continuum
– расширение дляtmux-resurrect
:- автоматически сохраняет сессии через заданные интервалы (60 минут);
- автоматически восстанавливает сессии при запуске tmux;
- активация с помощью юнита systemd:
- см.
systemctl status --user tmux
- см.
Дополнительно📦:
- автоматическая установка tpm при первом запуске и проверка/установка новых плагинов при каждом запуске/перезапуске;
- очистка старых файлов сессий старше 3 дней (в
~/.local/share/tmux/resurrect/
); - используется система восстановления для Neovim через механизм сессий.
Содержимое файла tmux.conf
Дабы не делать из статьи полотно, я скрыл содержимое файла конфига под спойлером🏎.
Для лучшего понимания, все параметры прокоментированы на русском😌:
#########################
### TMUX CLI COMMANDS ###
#########################
# Перечитать конфигурацию tmux tmux source ~/.config/tmux/tmux.conf
# Присоединиться к существующей сессии tmux attach -t session_name
# Убить все процессы tmux pkill -f tmux
# Установить указанные плагины через TPM prefix + I
# Запуск произвольной команды при запуске run-shell "~/your/command.sh"
# задается в tmux.conf
##########################
### ОСНОВНЫЕ ПАРАМЕТРЫ ###
##########################
set-option -g default-terminal "screen-256color" # Включить 256 цветов в терминале
#set -g default-terminal 'tmux-256color'
#set -g default-terminal 'xterm-256color'
set -ga terminal-overrides ',*:Tc' # Включить TrueColors
set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q' # Поддержка изменения формы курсора
set -g base-index 1 # Начать нумерацию окон с 1
set -g pane-base-index 1 # Начать нумерацию панелей с 1
set -g aggressive-resize on # Автоматически изменять размер панелей при изменении размера окна
set -g history-limit 10000 # Хранить 10,000 строк в буфере прокрутки
set -g set-titles on # Включить автоматическое обновление заголовков
set -g mouse on # Включить поддержку мыши
set -g mode-style "fg=black,bg=blue" # Настроить цвета выделения текста в режиме копирования
set -g status-position top # Разместить строку состояния вверху
set -g default-shell /usr/bin/zsh # Установить оболочку по умолчанию
set -g default-command /usr/bin/zsh # Установить команду оболочки по умолчанию
set -g mode-keys vi # Использовать привязки клавиш vi в режиме копирования
set -g status-keys vi # Использовать привязки клавиш vi для подсказок tmux
set -g @shell_mode 'vi' # Явно установить режим оболочки на vi
set-environment -g LC_CTYPE "ru_RU.UTF-8" # Установить кодировку окружения для русского языка
#set -g pane-active-border-style fg=blue # Установить цвет активной границы: пример с bg 'fg=blue,bg=green'
#set -s set-clipboard off # Режим буфера обмена включен|выключен|внешний
#set -g display-time 100 # Установить задержку после изменения фокуса панели (по умолчанию 750 мс)
## Дополнительная строка состояния
#setw -g pane-border-status bottom # Размещение границы
#setw -g pane-border-format '─' # Стиль границы
########################
### УПРАВЛЕНИЕ МЫШЬЮ ###
########################
# Открыть новое окно двойным щелчком на строке состояния
bind-key -n DoubleClick1Status new-window
# Привязки, специфичные для X11
%if "#{==:#{XDG_SESSION_TYPE},x11}"
# Средний щелчок вставляет из буфера обмена
unbind-key MouseDown2Pane
bind-key -n MouseDown2Pane \
run "tmux set-buffer \"$(xclip -out -sel clipboard)\"; tmux paste-buffer"
# Средний щелчок отменяет режим копирования и вставляет из буфера обмена
bind-key -T copy-mode-vi MouseDown2Pane \
select-pane \; \
send -X cancel \; \
run "tmux set-buffer \"$(xclip -out -sel clipboard)\"; tmux paste-buffer"
# Копировать выделение в буфер обмена без его очистки
bind -T copy-mode-vi MouseDragEnd1Pane \
select-pane \; \
send-keys -X copy-pipe-no-clear "xclip -in -sel clipboard"
# Отменить выделение при щелчке ЛБМ
bind -T copy-mode-vi MouseDown1Pane \
select-pane \; \
send-keys -X clear-selection
# Двойной и тройной щелчок ЛБМ для выделения слова/строки в режиме копирования
bind-key -T copy-mode-vi DoubleClick1Pane \
select-pane \; \
send-keys -X select-word \; \
send-keys -X copy-pipe-no-clear "xclip -in -sel clipboard"
bind-key -T copy-mode-vi TripleClick1Pane \
select-pane \; \
send-keys -X select-line \; \
send-keys -X copy-pipe-no-clear "xclip -in -sel clipboard"
%else # Привязки для сессий, не использующих X11
# Средний щелчок вставляет из буфера
unbind-key MouseDown2Pane
bind-key -n MouseDown2Pane paste-buffer
# Средний щелчок отменяет режим копирования и вставляет из буфера
bind-key -T copy-mode-vi MouseDown2Pane \
select-pane \; \
send -X cancel \; \
paste-buffer
# Копировать выделение без его очистки
bind -T copy-mode-vi MouseDragEnd1Pane \
select-pane \; \
send-keys -X copy-selection-no-clear
# Отменить выделение при щелчке ЛБМ
bind -T copy-mode-vi MouseDown1Pane \
select-pane \; \
send-keys -X clear-selection
# Двойной и тройной щелчок ЛБМ для выделения слова/строки в режиме копирования
bind-key -T copy-mode-vi DoubleClick1Pane \
select-pane \; \
send-keys -X select-word \; \
send-keys -X copy-selection-no-clear
bind-key -T copy-mode-vi TripleClick1Pane \
select-pane \; \
send-keys -X select-line \; \
send-keys -X copy-selection-no-clear
%endif
#########################
### КОМБИНАЦИИ КЛАВИШ ###
#########################
bind-key 'v' copy-mode # 'prefix+v' для включения режима копирования
bind-key -T copy-mode-vi 'v' send -X begin-selection # 'v' для начала выделения в режиме копирования
# Привязки, специфичные для X11
%if "#{==:#{XDG_SESSION_TYPE},x11}"
# 'Enter' и 'y' в режиме копирования, копирует выделение в буфер обмена с помощью xclip и отменяет режим копирования
bind-key -T copy-mode-vi 'Enter' \
select-pane \; \
send -X copy-pipe-and-cancel "xclip -in -sel clipboard"
bind-key -T copy-mode-vi 'y' \
select-pane \; \
send -X copy-pipe-and-cancel "xclip -in -sel clipboard"
# ']' и 'P' (заглавная) в обычном режиме, вставляет из буфера обмена с помощью xclip
bind-key ']' \
run "tmux set-buffer \"$(xclip -out -sel clipboard)\"; tmux paste-buffer"
bind-key 'P' \
run "tmux set-buffer \"$(xclip -out -sel clipboard)\"; tmux paste-buffer"
# ']' и 'p' в режиме копирования, отменяет режим копирования и вставляет из буфера обмена с помощью xclip
bind-key -T copy-mode-vi ']' \
select-pane \; \
send -X cancel \; \
run "tmux set-buffer \"$(xclip -out -sel clipboard)\"; tmux paste-buffer"
bind-key -T copy-mode-vi 'p' \
select-pane \; \
send -X cancel \; \
run "tmux set-buffer \"$(xclip -out -sel clipboard)\"; tmux paste-buffer"
%else # Если не в X11
# 'y' в режиме копирования, копирует выделение в буфер tmux и отменяет режим копирования
bind-key -T copy-mode-vi 'y' \
select-pane \; \
send -X copy-selection-and-cancel
# При нажатии 'P' (заглавная) в обычном режиме, вставляет из буфера tmux
bind-key 'P' paste-buffer
# При нажатии 'p' в режиме копирования, отменяет режим копирования и вставляет из буфера tmux
bind-key -T copy-mode-vi 'p' \
select-pane \; \
send -X cancel \; \
paste-buffer
%endif
# Навигация по панелям в стиле vi
bind-key -r -T prefix h select-pane -L
bind-key -r -T prefix j select-pane -D
bind-key -r -T prefix k select-pane -U
bind-key -r -T prefix l select-pane -R
# Изменение размера панелей с помощью клавиш в стиле vi
bind-key -r -T prefix H resize-pane -L 2
bind-key -r -T prefix J resize-pane -D 2
bind-key -r -T prefix K resize-pane -U 2
bind-key -r -T prefix L resize-pane -R 2
# Ручные привязки для сохранения/восстановления tmux-resurrect
# 'prefix+F5' для сохранения
bind-key -T prefix F5 run-shell \
'~/.config/tmux/plugins/tmux-resurrect/scripts/save.sh && mv -f $(find ~/.local/share/tmux/resurrect -type f -name "tmux_resurrect_*.txt" -size +0c | sort | tail -1) ~/.local/share/tmux/resurrect/main.txt && tmux display-message "Среда сохранена вручную!"'
# 'prefix+F6' для загрузки
bind-key -T prefix F6 run-shell \
'ln -sf ~/.local/share/tmux/resurrect/main.txt ~/.local/share/tmux/resurrect/last && ~/.config/tmux/plugins/tmux-resurrect/scripts/restore.sh'
#######################
### СПИСОК ПЛАГИНОВ ###
#######################
# Плагины
set -g @plugin 'tmux-plugins/tpm' # Менеджер плагинов
set -g @plugin 'tmux-plugins/tmux-sensible' # Оптимальные настройки по умолчанию для tmux
set -g @plugin 'arcticicestudio/nord-tmux' # Тема Nord для tmux
set -g @plugin 'tmux-plugins/tmux-resurrect' # Сохранение и восстановление окружения tmux
set -g @plugin 'tmux-plugins/tmux-continuum' # Автоматизация действий сохранения и восстановления tmux-resurrect
##########################
### НАСТРОЙКИ ПЛАГИНОВ ###
##########################
# Настройка tmux-resurrect
# Очистка старых файлов сессий
run-shell \
'find ~/.local/share/tmux/resurrect/ -type f -name "*.txt" ! -name "main.txt" -mtime +3 -delete'
#set -g @resurrect-capture-pane-contents 'on' # Восстановить содержимое предыдущих сессий
set -g @resurrect-strategy-nvim 'session' # Использовать сессии для восстановления Neovim
set -g @resurrect-processes 'ssh ranger mc tmux cmatrix ipython' # Процессы для восстановления
# Настройка tmux-continuum
set -g @continuum-boot 'on' # Автостарт tmux через systemd
set -g @continuum-restore 'on' # Авто-восстановление сессий tmux
set -g @continuum-save-interval '60' # Авто-сохранение каждые 60 минут
# Убедитесь, что плагин TPM установлен
if "test ! -d ~/.config/tmux/plugins/tpm" \
"run 'git clone https://github.com/tmux-plugins/tpm ~/.config/tmux/plugins/tpm'"
# Автоустановка других плагинов на новом компьютере
run '~/.config/tmux/plugins/tpm/tpm'
run '~/.config/tmux/plugins/tpm/bin/install_plugins'
# Инициализация TPM (сохраняйте эту строку в самом низу tmux.conf)
run '~/.config/tmux/plugins/tpm/tpm'
Напомню: последняя версия tmux.conf
также доступна в моем GitHub.
Базовые горячие клавиши Tmux
Ниже представлены частоиспользуемые базовые команды/сочетания клавиш tmux. Если планируете регулярно работать в среде tmux, то настоятельно рекомендую их запомнить🤯.
Префикс❗️:
Ctrl-b
– prefix;
Управление окнами (windows)🪟:
prefix+c
– создать новое окно (на статус панели выглядит, как вкладка);prefix+w
– показать список окон;prefix+n
– переключиться на следующее окно;prefix+p
– переключиться на предыдущее окно;prefix+<номер>
– перейти к окну с указанным номером (например,ptefix+1
– к первому окну);prefix+,
– переименовать текущее окно.
Управление панелями (panes)🎛:
prefix+%
– разделить окно на панели вертикально;prefix+"
– разделить окно на панели горизонтально;prefix+o
– переключиться на следующую панель;prefix+q
– показать номера панелей (полезно для выбора);prefix+x
– закрыть текущую панель;prefix+z
– развернуть текущую панель на весь экран (и вернуть её обратно);prefix+{
– переместить панель влево;prefix+}
– переместить панель вправо;prefix+!
– вынести текущую панель в отдельное окно.
Управление сессиями📚:
tmux new -s <имя>
– создать новую сессию с именем;tmux ls
– показать список сессий;tmux attach -t <имя>
– подключиться к сессии;prefix+d
– отсоединиться от текущей сессии.
Копирование и вставка📋:
prefix+[
– войти в режим копирования;- Стрелки или PgUp/PgDn – навигация по истории;
- Пробел – начать выделение текста;
- Enter – скопировать выделенный текст;
- Esc – отмена выделения;
- q – выход из режима копирования;
prefix+]
– вставить скопированный текст.
Дополнительно📦:
prefix+t
– показать часы;prefix+?
– показать справку о всех комбинациях клавиш;prefix+s
– показать список сессий.
Кастомные горячие клавиши Tmux
Добавленные/измененные команды/клавиши из моего конфига.
Режим копирования и работа с буфером обмена📝:
prefix+v
– включает режим копирования (аналогprefix+[
);v
(в режиме копирования) – начинает выделение текста;Enter
иy
(в режиме копирования, X11):- копирует выделенный текст в системный буфер обмена с помощью
xclip
; - завершает режим копирования;
- копирует выделенный текст в системный буфер обмена с помощью
y
(в режиме копирования, не X11):- копирует выделение в буфер
tmux
; - завершает режим копирования;
- копирует выделение в буфер
p
(в режиме копирования, X11):- завершает режим копирования;
- вставляет содержимое системного буфера обмена с помощью
xclip
.
p
(в режиме копирования, не X11):- завершает режим копирования;
- вставляет содержимое буфера
tmux
;
prefix+]
иprefix+P
(в обычном режиме, X11):- вставляет содержимое системного буфера обмена с помощью
xclip
;
- вставляет содержимое системного буфера обмена с помощью
prefix+]
иprefix+P
(в обычном режиме, не X11):- вставляет содержимое буфера
tmux
.
- вставляет содержимое буфера
Навигация между панелями (в стиле vi)🎛:
prefix+h
– переключиться на панель слева;prefix+j
– переключиться на панель снизу;prefix+k
– переключиться на панель сверху;prefix+l
– переключиться на панель справа.
Изменение размеров панелей (в стиле vi)🎛, клавишу команды можно нажимать многократно:
prefix+H
– увеличить панель влево на 2 пикселя;prefix+J
– увеличить панель вниз на 2 пикселя;prefix+K
– увеличить панель вверх на 2 пикселя;prefix+L
– увеличить панель вправо на 2 пикселя.
Сохранение и восстановление среды через tmux-resurrect💾:
prefix+F5
:- сохраняет текущее состояние tmux с помощью
tmux-resurrect
; - перемещает последнюю сохранённую сессию в файл
~/.local/share/tmux/resurrect/main.txt
для удобства восстановления; - показывает сообщение о ручном сохранении;
- сохраняет текущее состояние tmux с помощью
prefix+F6
:- загружает сохранённое состояние из файла
main.txt
.
- загружает сохранённое состояние из файла
Послесловие
Фух😮💨. Сегодня в нашем арсенале Linux администратора появился еще один полезный инструмент🧑💻. С его помощью крайне удобно обслуживать системы📺, где нет графики, например на серверах, которые работают 24/7. Единожды запустили все необходимые утилиты и после просто подключаемся к запущенной сессии, с помощью короткого алиаса😌.
Обязательно подписывайтесь на наш телеграм канал✈️, чтобы не пропустить новых публикаций на сайте🌐. А если у вас остались вопросы, то добавляйтесь в Вороний чат: у нас там дружелюбное микросообщество🐧🚶♂️🐧🚶♂️🐧🚶♂️.
Спасибо, что читаете😇. Желаю успехов в освоении новых инструментов, которые упрощают рутину и повышают эффективность💪.