Yesterday

Tmux – установка и кастомизация + Nord theme

Tmux – установка и кастомизация + Nord theme

Исходный сайт представленного материала: r4ven.me

Приветствую!

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

Присоединяйтесь к нашему каналу в телеграм: t.me/r4ven_me, уведомления о новых постах приходят туда в день публикации. А если у вас есть вопросы или просто желание пообщаться по тематике – заглядывайте в чат: t.me/r4ven_me_chat.

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

Предисловие

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

  1. Любой моноширный иконочный Powerline шрифт⚡️.
    • Например из проекта Nerd fonts. Я предпочитаю шрифт Hack Nerd Font Mono. Шрифт необходимо поместить по пути /usr/share/fonts/ либо отдельно для пользователя в ~/.local/share/fonts/ и применить его к терминалу.
  2. Любой эмулятор терминал🧑‍💻, с поддержкой TrueColor и темы Nord.
  3. (Опционально) Консольный редактор📝 с темой Nord.
  4. (Опционально) Интерактивная командная оболочка💻.

Для тех, кто только знакомится с 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.

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

  1. tmux-plugins/tpm – менеджер плагинов для tmux:
    • обеспечивает установку и управление другими плагинами;
  2. tmux-plugins/tmux-sensible – устанавливает оптимальные настройки tmux по умолчанию;
  3. arcticicestudio/nord-tmux – устанавливает тему Nord для tmux;
  4. tmux-plugins/tmux-resurrect – сохраняет состояние сессий (окна, панели, запущенные процессы) и позволяет восстанавливать сессии после перезапуска tmux;
  5. tmux-plugins/tmux-continuum – расширение для tmux-resurrect:
    • автоматически сохраняет сессии через заданные интервалы (60 минут);
    • автоматически восстанавливает сессии при запуске tmux;
    • активация с помощью юнита systemd:
      • см. systemctl status --user tmux

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

  • автоматическая установка tpm при первом запуске и проверка/установка новых плагинов при каждом запуске/перезапуске;
  • очистка старых файлов сессий старше 3 дней (в ~/.local/share/tmux/resurrect/);
  • используется система восстановления для Neovim через механизм сессий.

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

Дабы не делать из статьи полотно, последняя версия 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

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

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

  1. prefix+v – включает режим копирования (аналог prefix+[);
  2. v (в режиме копирования) – начинает выделение текста;
  3. Enter и y (в режиме копирования, X11):
    • копирует выделенный текст в системный буфер обмена с помощью xclip;
    • завершает режим копирования;
  4. y (в режиме копирования, не X11):
    • копирует выделение в буфер tmux;
    • завершает режим копирования;
  5. p (в режиме копирования, X11):
    • завершает режим копирования;
    • вставляет содержимое системного буфера обмена с помощью xclip.
  6. p (в режиме копирования, не X11):
    • завершает режим копирования;
    • вставляет содержимое буфера tmux;
  7. prefix+] и prefix+P (в обычном режиме, X11):
    • вставляет содержимое системного буфера обмена с помощью xclip;
  8. 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💾:

  1. prefix+F5:
    • сохраняет текущее состояние tmux с помощью tmux-resurrect;
    • перемещает последнюю сохранённую сессию в файл ~/.local/share/tmux/resurrect/main.txt для удобства восстановления;
    • показывает сообщение о ручном сохранении;
  2. prefix+F6:
    • загружает сохранённое состояние из файла main.txt.

Послесловие

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

Обязательно подписывайтесь на наш телеграм канал✈️, чтобы не пропустить новых публикаций на сайте🌐. А если у вас остались вопросы, то добавляйтесь в Вороний чат: у нас там дружелюбное микросообщество🐧🚶‍♂️🐧🚶‍♂️🐧🚶‍♂️.

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

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