Мой терминал: alacritty, zsh, tmux, nvim

В этой статье я расскажу о том, как я выстроил работу с терминалом в Linux под себя и какие инструменты использовал для этого.

Дистрибутивы на базе ядра Linux я использую в качестве основной ОС последние года два. Начинал с Mint + Cinnamon, работал на Ubuntu, Manjaro + Gnome, Manjaro + Cinnamon, но в итоге на данный момент пришёл к Manjaro Linux с окружением рабочего стола KDE. Данное сочетание имеет достаточно широкие возможности для кастомизации и при этом вполне приятный графический интерфейс «из коробки». Я считаю его одним из лучших решений как для начинающих, так и для тех, кто просто не хочет заниматься длительной настройкой всей системы под себя.

Эмулятор терминала

Эмулятор терминала — это инструмент, который дает доступ к командной оболочке операционной системы. То, с чего начинается ваше взаимодействие с терминалом, если вы используете ОС с графической оболочкой.

Краткий обзор эмуляторов терминала, которые я использовал:

Дефолтный Gnome Terminal в Ubuntu

Тема, используемая в Ubuntu по умолчанию, на мой взгляд, ужасна. Я не понимаю, как в принципе можно пользоваться темой с белыми (и тем более — тёмно-синими) буквами на тёмно-фиолетовом фоне. Очевидно, тему можно поменять; я говорю именно про дефолтную. По функциональности — вполне обычный эмулятор терминала.

71c954ec4f5f3b14eb9c47e2f6f8b2a5.png

Terminator

Позволяет расположить несколько терминалов в сетке, а так же работать несколькими с вкладками при помощи горячих клавиш. В целом — хороший вариант, сам длительное время пользовался им. Из минусов — раздражающий tilebar у каждого терминала и обилие настроек, управление которыми происходит из графического интерфейса.

a8d57427e9a4a166bebb5f5d1043fa62.png

Дефолтный Konsole в Manjaro KDE

Для новичков — очень неплохой вариант. По умолчанию в качестве командной оболочки установлен zsh и несколько плагинов (в частности — автодополнение команд и подсветка их синтаксиса)

2a678aa204fdb98da14cf1c6628e5ad2.png

На мой взгляд, сильно перегружен. Имеет огромное количество меню и настроек, управление которыми происходит из графического интерфейса. При должном усилии их можно отключить, но для меня данный инструмент всё равно остаётся антиминималистичным.

Alacritty

Мой выбор! Alacritty — очень быстрый, стабильный и минималистичный эмулятор терминала. Все его настройки задаются в одном простом конфигурационном файле ~/.config/alacritty/alacritty.yml.

Некоторые из настроек:

  • Темы. Можно прописать каждый цвет палитры вручную, а можно установить тему из репозитория парой команд

  • Шрифт, размер текста

  • Отступы от краёв окна

  • Прозрачность фона

  • Дополнительные биндинги клавиш

Мой конфигурационный файл — тут.

В терминале я обычно использую тему onedark (darker), поэтому прописал в конфиге все цвета вручную.

Минусы:

  • Не очень подробная и понятная документация. Однако, если уметь искать информацию, любой вопрос можно решить.

  • Отсутствие вкладок и окон. Этот недостаток я решил при помощи терминального мультиплексора tmux.

  • Отсутствие возможности настроить размытие заднего фона при включении прозрачности терминала, в отличие от того же Konsole. Для меня этот недостаток не является критичным, поскольку 99% времени прозрачность терминала у меня выключена.

  • Отсутствие поддержки sixel. Для меня это также не является критичным, но если вам она необходима, существует сборка Alacritty с поддержкой sixel.

195f6d5c4f56223c0fb5fa57798e4b33.png

Для того чтобы всегда иметь терминал «под рукой», я забиндил запуск Alacritty на сочетание клавиш Meta (Win) + Enter.

Командная оболочка

bash

Используется в большинстве дистрибутивов по умолчанию.

Обычно приглашение ко вводу имеет следующий вид: username@hostname:current-directory$

7ad644d82439546e60abdb104387a77d.png

Его можно настроить в переменной $PS1, однако можно столкнуться со сломавшейся историей команд.

Новичкам и тем, кто редко работает с терминалом, подойдёт, но для частого и профессионального использования лучше присмотреться к более продвинутым аналогам.

zsh

Мой выбор! Гораздо более кастомизируемая и функциональная, по сравнению с bash, оболочка. Особенно при использовании фреймворка oh-my-zsh.

Мой конфигурационный файл — тут.

Установить в качестве оболочки по умолчанию:

chsh -s /bin/zsh

Темы

Расширение oh-my-zsh позволяет выбрать одну из готовых тем или создать свою. Под темой подразумеваются настройки приглашения ко вводу.

По умолчанию используется тема robbyrussell:

a3bd488c1a49ec0ee91e2118f7cab2c5.jpg

Я предпочитаю gozilla, поскольку она более минималистичная.

994de7164812a1e0bfa534c5fdffb95d.jpg

Плагины

Расширение oh-my-zsh позволяет добавлять множество плагинов, которые упрощают и ускоряют работу с терминалом. Список подключаемых плагинов задаётся в следующей строчке в файле конфигурации (~/.zshrc):

plugins=(...) # Названия плагинов перечисляются через пробел

Я использую:

  • git — алиасы и функции для работы с git

  • tmux — алиасы и настройки для работы с tmux

  • history — 3 алиаса для быстрой работы с историей команд

  • sudo — двойное нажатие esc добавляет sudo в начало набранной команды

  • zsh-syntax-highlighting — подсветка синтаксиса команд. Устанавливается отдельно

Кастомные алиасы

Помимо алиасов, предоставляемых oh-my-zsh и плагинами, я задал собственные алиасы:

alias i="sudo pacman -S"
alias m="make"
alias n="nvim"
alias v="vim"
alias c="clear"

Вместо стандартной команды ls использую её современный аналог exa.

if [ -x "$(command -v exa)" ]; then
    alias l="exa --long --all --group"
fi

Разница в выводах данных команд видна на скриншоте:

404bcf3bcea3a3f5010c823a9e7b0766.png

«Шаблонный» алиас для ускорения открытия рабочего проекта:

alias gptd="cd  && nvim"

Мнемоническое правило:

  • g — go (идти, перейти)

  • ptd — одна или несколько букв, обозначающих рабочую директорию

Посмотреть все заданные алиасы можно при помощи команды alias.

Лайфхаки

Перемещение по директориям

Горячие клавиши

  • Ctrl + u — вырезать введённую команду

  • Ctrl + y — вставить вырезанную команду

  • Ctrl + a/e — перейти в начало/конец

  • Ctrl + d — удалить символ под курсором

  • Ctrl + f/b — двигать курсор вправо/влево по символам

  • Alt + f/b — двигать курсор вправо/влево по словам

  • Ctrl + r — поиск по истории команд

Разное

  • reset — перезапуск сессии командной строки

  • sudo !! — повторить предыдущую команду с sudo

  • history — история команд

  • !n (где n — номер команды) — запустить команду из истории

  • !* — подставить все аргументы предыдущей команды

  • !^, !$ — подставить первый/последний аргумент предыдущей команды

tmux

tmux — утилита-мультиплексор, предоставляющая доступ к нескольким терминалам одновременно.

5ccca8f2cd740a7cd11ee5e2098e0deb.png

Возможности:

  • Открывать несколько сессий

  • Открывать несколько вкладок в сессии

  • Открывать несколько окон в вкладке

  • Сохранять сессии

  • Выводить toolbar c открытыми вкладками, а так же другой информацией

Управление происходит преимущественно при помощи горячих клавиш, что позволяет ускорить работу.

Каждое сочетание горячих клавиш в tmux начинается с префикса. По умолчанию это сочетание клавиш Ctrl+b. Однако для удобства я изменил его на Ctrl+a и переназначил в системе редкоиспользуемую мною клавишу Caps Lock на Ctrl. Таким образом, управление tmux ускоряется ещё сильнее.

Моя конфигурация и её описание — тут.

Сценарии использования

При работе на локальной машине. Как я писал выше, Alacritty не поддерживает работу с несколькими вкладками и окнами. Что ж, не беда, — tmux прекрасно справляется с этой задачей! Он позволяет управлять множеством окон терминалов даже гибче и быстрее, чем иные эмуляторы терминала, поддерживающие работу с несколькими вкладками и окнами.

При работе на сервере. При подключении к удалённому серверу по ssh крайне удобно сразу запустить на нём tmux-сессию, которая позволит открыть несколько окон с терминалами и работать в них параллельно. Помимо этого преимущества использование tmux даёт как минимум ещё одно. При отключении от сервера (намеренном или случайном) сессия tmux по-прежнему остаётся запущенной, а значит все открытые вкладки и окна при последующем подключении останутся в том состоянии, в котором они находились на момент отключения.

Быстрый запуск

Согласитесь, каждый раз запускать эмулятор терминала (пусть даже при помощи горячей клавиши), затем создавать новую сессию tmux (путь даже при помощи алиаса), а после окончания работы не забывать её удалить — сложно и долго. Нельзя ли это как-то автоматизировать? Мы же в Linux — конечно, можно!

Я написал пару простых bash-скриптов, которые позволяют запускать Alacritty, создавать новую tmux-сессию, имеющую уникальное имя (количество секунд, прошедших с 00:00 01.01.1970), и после закрытия автоматически удалять созданную сессию.

alacritty-with-tmux.sh

#!/bin/sh
cur_time=$(date +%s)
alacritty --command=tmux-new-session.sh && tmux kill-session -t $cur_time 

tmux-new-session.sh

#!/bin/sh
tmux new-session -s $(date +%s)
exit $?

Остаётся только дать этим скриптам права на запуск, положить их в ~/.local/bin/ и в настройках окружения рабочего стола забиндить какую-либо горячую клавишу (в моём случае — Meta+Ctrl+Enter) на запуск скрипта alacritty-with-tmux.sh. Всё! Теперь вы можете запускать Alacritty сразу с tmux’ом всего одной горячей клавишей.

nvim

Про vim можно говорить бесконечно (как и шутить про выход из него). Сейчас я расскажу лишь малую часть, а более подробный обзор возможностей vim и моей конфигурации выйдет в отдельной статье.

Я использую форк vim’а — neovim (nvim). Одно из наиболее важных его преимуществ — удобство настройки и кастомизации. Все параметры, подключение плагинов и даже собственные плагины можно описать при помощи lua, в отличие от оригинального vim, в котором используется собственный язык — VimScript.

Для разработки

«Из коробки» neovim проигрывает по функциональности современным IDE в ряде аспектов. Суть использования подобных инструментов отчасти заключается в том, что каждый пользователь может и должен сам понять, какая функциональность ему необходима, и добавить её в свою конфигурацию при помощи задания собственных параметров в настройках и подключения плагинов.

Если вы ещё не определились, какая именно функциональность вам нужна, а попробовать использовать neovim для работы над полноценными проектами хочется, рекомендую начать с популярной сборки AstroNvim, имеющей в своём составе множество плагинов, превращающих данный текстовый редактор в полноценную IDE.

Я нахожу крайне удобной связку tmux+nvim. Один из моих сценариев её использования: в одной вкладке tmux’а открыт nvim с кодом проекта, в другой — запускается сервер, в третьей — тесты, и т. д.

feeb8284523a26a4b865b5f2825918b5.png

Вывод

Некоторые считают, что использование терминала — устаревший способ взаимодействия с компьютером и гораздо проще делать всё из приложений с графическим интерфейсом при помощи манипулятора типа «мышь». На мой взгляд, это не так. Множество действий можно гораздо быстрее выполнять при помощи терминала. Безусловно, понадобится некоторое время, чтобы запомнить все необходимые хоткеи, наработать мышечную память, и, что немаловажно — понять именно свои потребности, после чего подобрать и настроить каждый инструмент под себя. Однако после этого вы получите колоссальный прирост производительности при меньших трудозатратах.

Материалы

  • «Top 10 Oh My Zsh Plugins For Productive Developers»

  • «The top 5 zsh plugins I can’t live without!»

  • Плейлист про tmux на канале «Диджитализируй!»

  • «Красивый терминал за 5 минут»

  • «Настройка терминала в macOS, установка Alacritty, Kitty и консольных утилит»

  • «Vim 06 — Vim + Tmux = ♥»

  • «Терминал, командная строка, ZSH, BASH, FISH, Alacritty, Kitty, Foot, URXVT, st»

© Habrahabr.ru