Исходный сайт представленного материала: r4ven.me
Приветствую!
Сегодня мы рассмотрим процесс конфигурации популярной командной оболочки ZSH⚙️ через файл загрузки окружения .zshrc📝 при использовании фреймворка oh-my-zsh.
Подписывайтесь на наш телеграм @r4ven_me📱, чтобы не пропустить новые публикации на сайте😉. А если есть вопросы или желание пообщаться по тематике – заглядывайте в Вороний чат @r4ven_me_chat🧐.
Демонстрация приведенная в данной статье выполнялась в среде дистрибутива Linux Mint 22🌱 (Ubuntu 24🦍). Аналогичным образом все будет работать и в других популярных дистрибутивах Linux☝️.
Погнали🏎.
Предисловие
Если вы много времени проводите в консоли/терминале Linux🧑💻, то вероятно слышали про инструменты, которые облегчают взаимодействие с командной строкой и выводят “юзер экспириенс” на “новый уровень”🤔. Один из таких инструментов — оболочка ZSH и созданный умельцами фреймворк для ее простого и удобного конфигурирования — oh-my-zsh🔥.
Ранее я достаточно много времени потратил на приведение используемой мной оболочки к “идеальному”, на мой взгляд, или близко к тому состоянию🫠.
Ниже я приведу подробное описание своего конфига ZSH в файле .zshrc✍️, чтобы бы вы понимали, зачем вам это нужно.
После покажу (до безобразия простой🤷♂️) способ установки и применения данного конфига. Все внешние зависимости, такие как сам oh-my-zsh и дополнительные плагины будут установлены автоматически🦾 при первом запуске ZSH.
Процесс ручной установки ZSH + oh-my-zsh описан в отдельной статье.
Описание конфигурации .zshrc
В этом разделе представлено, разделенное по блокам🧱 файла .zshrc, описание того, что данный конфиг изменяет/дополняет в поведении оболочки ZSH.
ОБЩИЕ НАСТРОЙКИ🛠
- Добавление пользовательских директорий bin, .bin, .local/bin в переменную PATH для упрощения доступа к пользовательским скриптам;
- установка переменных окружения для работы с oh-my-zsh (ZSH, ZSH_CUSTOM) и корректной поддержки цвета в терминале (TERM);
- выбор темы оболочки в зависимости от среды:agnoster — для GUI и псевдотерминальных сеансов (PTS);
dpoggi (без иконок) — для консольных сеансов (TTY); - отключение автоматического обновления oh-my-zsh (команда для обновления вручную: omz update);
- настройка истории команд:хранение до 10,000 команд;
добавление временных меток в формате yyyy-mm-dd;
игнорирование повторяющихся записей и команд, начинающихся с пробела;
общая история между терминальными сессиями🔥.
ПЛАГИНЫ🗃
Для улучшения работы с оболочкой используются следующие плагины:
- fzf — поиск по истории команд с использованием утилиты fzf --exact через Ctrl+r;
- git — алиасы и утилиты для работы с Git;
- cmdtime — измерение времени выполнения команд (выводится в конце последней строки);
- zsh-autopair — автоматическое закрытие скобок и кавычек во время введения команды;
- zsh-completions — расширенные автодополнения через Tab в т.ч. подкоманд и ключей команд;
- zsh-autosuggestions — подсвечиваемые подсказки на основе истории команд;
- fast-syntax-highlighting — подсветка синтаксиса команд;
- history-substring-search — поиск по истории при введении части команды через стрелки вверх/вниз.
Несколько примеров использования:
- Ctrl+r — вызов fzf для поиска команды из истории;
- при вводе части команды нажмите Tab для расширенного автодополнения (подкоманды, имена файлов или опции команд);
- при вводе части команды нажмите вверх, чтобы найти похожие команды из истории.
ПРИЛОЖЕНИЯ И УТИЛИТЫ🧑💻
- Установлены алиасы для упрощения часто используемых команд:python -> python3;
быстрый пинг DNS сервера google по команде p8, подсветка вывода команды ip;
выбор редактора по умолчанию (nvim или vim) + удобные алиасы; - установка цветовой палитры Nord для утилиты fzf;
- использование bat/batcat, как замены cat, less, man, --help и tail -f с подсветкой цветов темы Nord;
- замена команды ls на exa/eza с улучшенными опциями отображения (длинный список, древовидный вывод, сортировка).
Подробнее про bat и exa смотрите в статье: bat, exa – подсветка синтаксиса стандартного вывода в терминале Linux (cat, less, tail и ls).
АВТОМАТИЧЕСКАЯ УСТАНОВКА🦾
При запуске оболочки она автоматически проверяет и устанавливает oh-my-zsh и недостающие плагины (cmdtime, zsh-autopair, zsh-completions, zsh-autosuggestions, fast-syntax-highlighting).
ФУНКЦИЯ БЫСТРОГО ВЫЗОВА КАСТОМНЫХ КОМАНД – cmd
Что делает функция:
- содержит массив из коротких ключей-имен команд, в значении которых расположены, не редко зубодробительные, команды;
- выводит весь список доступных команд с помощью ключа -h;
- умеет в интерактивность с помощью пролистывания вариантов с помощью клавиши Tab;
- после нажатия Enter команда не выполняется, а вводится в качестве следующей команды, но без выполнения, чтобы ее можно было отредактировать при необходимости.
Как выглядит работа такой команды/функции:
Вам остается лишь наполнить массив cmd_list своими командами, в формате:
short_name "long_command"
Чувствительные для оболочки спец. символы, используемые в сложных командах — нужно экранировать. В каких-то случаях с помощью кавычек, в иных обратной косой чертой. Пример: \$
ПРИГЛАШЕНИЕ ОБОЛОЧКИ👋
Убрано отображение user@host из приглашения оболочки, если используется графическая среда.
Теперь переходим к подготовке и установке.
Подготовка
Установка необходимых пакетов
Предварительно нам необходимо установить саму оболочку zsh, утилиту для взаимодействия с веб curl и систему контроля версий git:
sudo apt update && sudo apt install -y git curl zsh
Также (опционально) рекомендую установить утилиты для подсветки терминального вывода и удобного поиска:
sudo apt install -y bat exa fzf || sudo apt install -y bat eza fzf
Установка powerline шрифта для GUI сеанса
Для корректной отрисовки иконок в вашем терминале во время графической сессии — необходимо использовать специальный мноноширный иконочный powerline шрифт🤯, например, из проекта Nerd fonts.
Мои читатели знают, что я предпочитаю шрифт Hack☝️. Вот простой пример, как его можно установить:
Обратите вниманием, что для выполнения команд потребуются права sudo. Либо установите шрифты только для текущего пользователя в директории ~/.local/share/fonts.
# создаем директорию шрифта
sudo mkdir /usr/share/fonts/Hack
# скачиваем архив со шрифтами
curl -fsSLO \
$(curl -s https://api.github.com/repos/ryanoasis/nerd-fonts/releases/latest \
| grep browser_download_url \
| grep 'Hack.zip' \
| cut -d '"' -f 4)
# распаковываем архив, коприруем шрифты в систем
sudo unzip ./Hack.zip -d /usr/share/fonts/Hack/ && rm -f ./Hack.zip
В команде curl используется механизм подстановки командной строки. Т.е. основной команде на скачивание: curl -fsSLO передается аргумент, который является результатом выполнения другой команды внутри конструкции $(command), выполняющейся предварительно. В итоге основная команда получит прямой URL на zip файл последнего релиза шрифта Hack из GitHub. Команда универсальна.
После установки шрифта, активируйте его в настройках вашего терминала🛠.
В Gnome-terminal это делается так:
Скачивание и применение готовой конфигурации .zshrc
Теперь скачиваем готовый файл .zshrc с моего GitHub с предварительным бэкапом текущего .zshrc, если он существует:
# бэкап текущего .zshrc
test -e ~/.zshrc && mv ~/{.zshrc,.zshrc_backup}
# скачивание нового .zshrc
curl -fsSL https://raw.githubusercontent.com/r4ven-me/dots/main/.zshrc -o ~/.zshrc
# активация оболочки zsh
exec zsh
Отлично👏.
Если вы в десктопном сеансе, у вас будет минималистичный prompt:
В ином случае он будет таким:
Консольный же сеанс будет с использованием темы без иконок:
На данный момент мы просто запустили оболочку zsh в текущем сеансе☝️. Чтобы сделать zsh вашей оболочкой по умолчанию (если это не так) выполните команду:
[[ $SHELL == *zsh ]] || chsh -s /usr/bin/zsh
Готово. Для корректного применения изменений рекомендуется выйти из текущего сеанса и зайти заново🚶➡️.
Ну и парочка скриншотов под спойлером
Tab
Ctrl+r
history
Пример работы bat и exa:
cat ~/.bashrc
less ~/.zshrc
tailf /var/log/apt/history.log
ls -la
Послесловие
В этот раз мы детально рассмотрели, как настроить поведение оболочки ZSH в файле .zshrc при использовании популярного фреймворка oh-my-zsh😌.
На мой взгляд, кастомизация своего рабочего пространства (в т.ч. оболочки) значительно увеличивает эффективность🧑💻. Если конечно не заниматься этим фанатично😉. Многие игнорируют данный момент, предпочитая дефолтные настройки. Не могу сказать, что это плохо, просто имея некоторый опыт уяснил для себя: лучше потратить немного (или много) времени на настройку👨🔧 и просто пользоваться полученным конфигом везде, где возможно, тем самым решая различные задачи с большим удобством и меньшим количеством нервов😎.
Например, при вводе команды в терминале постоянно забываешь (или не знаешь🤷♂️), какие ключи у нее есть и что они делают. Приходится прерывать ввод, чтобы посмотреть справку. В случае моей конфигурации, для большинства популярных команд, достаточно просто нажать Tab, чтобы увидеть подсказку по ключам, которые еще и можно “протабать”👌. Сюда же относится удобство работы с историей команд и так далее😏.
Спасибо, что читаете 😊. Обязательно заглядывайте в нашу телегу: @r4ven_me, чтобы не пропустить новые публикации на сайте. А если остались вопросы – добавляйтесь в Вороний чат. У нас там дружелюбное микросообщество 🚶♀️🐧🚶🐧🚶♂️🐧 и я периодически пересылаю туда разные интересные новости из мира IT.