Tmux — установка и кастомизация + Nord theme
Приветствую!

В прошлой заметке 📝 мы говорили про терминальные мультиплексоры и какие задачи они выполняют. В сегодняшней статье я продемонстрирую установку и кастомизацию самого популярного инструмента из данной категории — Tmux 🪟. Как обычно, уже все выстрадано настроено, и для повторения подобного у вас, необходимо будет выполнить всего несколько команд🧑💻.

Демонстрация, приведенная в данной статье выполнялась в среде дистрибутива Linux Mint 22 с Tmux версии 3.4 ✍️.

Предисловие

Я очень люблю тему ❄️ от разработчиков Arcticicestudio⛄️ и предпочитаю оформлять свою систему и приложения в этой палитре😌. Tmux не стал исключением, поэтому для корректного и гармоничного отображения конфигурации, как у меня вам понадобятся:

Для тех, кто только знакомится с Tmux кратко перечислю его сущности🧐:

Можем приступать к установке.

Установка Tmux

Tmux почти всегда есть в стандартных репозиториях, а во многих дистрибутивах Linux он даже предустановлен👌.

Открываем терминал и выполняем:

BASH
sudo apt update && sudo apt install -y curl git xclip tmux
Нажмите, чтобы развернуть и увидеть больше

Скачивание конфига и запуск

Теперь воспользуемся утилитой curl, чтобы скачать файл конфигурации Tmux с моего GitHub 😇 репозитория:

BASH
curl --create-dirs -fLo \
    ~/.config/tmux/tmux.conf \
    https://raw.githubusercontent.com/r4ven-me/dots/main/.config/tmux/tmux.conf
Нажмите, чтобы развернуть и увидеть больше

Осталось только запустить Tmux😳. Первый запуск займет некоторое время⏳, т.к. будут скачиваться менеджер плагинов и далее сами плагины с помощью этого менеджера.

Конфигурация построена так, что при добавлении новых плагинов, во время запуска/перезапуска Tmux, они будут устанавливаться автоматически😌. Для установки плагинов вручную используйте prefix+I.

Для создания новой именованной сессии воспользуйтесь командой:

BASH
tmux new -s Work
Нажмите, чтобы развернуть и увидеть больше

Где:

Должно получиться примерно так:

Все😃 настройка завершена! теперь можно активно пользоваться:

А если у вас широкий монитор, то вообще 🔥🔥🔥!

В таком терминале и жить можно😎

Для выхода из tmux без закрытия сессий отправьте команду dettach специальной горячей клавишей: сперва нажмите сочетание клавиш так называемого префикса, по умолчанию это Ctrl+b, а затем сразу же клавишу d, сокращенно: prefix+d.

Да, такой стиль горячих клавиш у Tmux🤷♂️. Сперва нажимается клавиша prefix, а затем клавиша действия/команды. К такому способу нужно привыкнуть. Клавишу prefix можно изменить в конфигурации. Но делать это не рекомендуется, чтобы сохранить универсальность🫠.

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

BASH
tmux attach -t Work || tmux new -s Work
Нажмите, чтобы развернуть и увидеть больше

Где:

Рекомендую сразу же создать удобный alias для вашей оболочки:

BASH
echo 'alias T="tmux attach -t Work || tmux new -s Work"' >> ~/.profile

source ~/.profile
Нажмите, чтобы развернуть и увидеть больше

Замените ~/.profile на файл с параметрами подготовки вашего окружения оболочки при необходимости☝️.

Теперь подключаться к существующей сессии с именем Work можно просто по команде из одной буквы T.

Описание конфигурации и обзор файла tmux.conf

Что дополняет/изменяет данная конфигурация

Общие настройки📖:

Управление мышью🐁:

Клавиатурные сочетания🎹:

Немного расширены некоторые сочетания клавиш. Подробнее смотрите далее: Пункт 6. Кастомные горячие клавиши Tmux.

Список плагинов📋:

Дополнительно📦:

Содержимое файла tmux.conf

Для лучшего понимания, все параметры прокоментированы на русском😌:

BASH
#########################
### 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) 🪟:

Управление панелями (panes) 🎛:

Управление сессиями 📚:

Копирование и вставка 📋:

Дополнительно 📦:

Кастомные горячие клавиши Tmux

Добавленные/измененные команды/клавиши из моего конфига.

Режим копирования и работа с буфером обмена 📝:

Навигация между панелями (в стиле vi) 🎛:

Изменение размеров панелей (в стиле vi)🎛, клавишу команды можно нажимать многократно:

Сохранение и восстановление среды через tmux-resurrect 💾:

Послесловие

Фух😮💨. Сегодня в нашем арсенале Linux администратора появился еще один полезный инструмент🧑💻. С его помощью крайне удобно обслуживать системы📺, где нет графики, например на серверах, которые работают 24/7. Единожды запустили все необходимые утилиты и после просто подключаемся к запущенной сессии, с помощью короткого алиаса😌.

Спасибо, что читаете😇. Желаю успехов в освоении новых инструментов, которые упрощают рутину и повышают эффективность💪.

Полезные материалы

Авторские права

Автор: Иван Чёрный

Ссылка: https://r4ven.me/dots/tmux-ustanovka-i-kastomizaciya-nord-theme/

Лицензия: CC BY-NC-SA 4.0

Использование материалов блога разрешается при условии: указания авторства/источника, некоммерческого использования и сохранения лицензии.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша