Найти в Дзене
Вороний блог | Linux и IT

Тонкая настройка .zshrc при использовании oh-my-zsh

Исходный сайт представленного материала: r4ven.me Сегодня мы рассмотрим процесс конфигурации популярной командной оболочки ZSH⚙️ через файл загрузки окружения .zshrc📝 при использовании фреймворка oh-my-zsh. Подписывайтесь на наш телеграм @r4ven_me📱, чтобы не пропустить новые публикации на сайте😉. А если есть вопросы или желание пообщаться по тематике – заглядывайте в Вороний чат @r4ven_me_chat🧐. Демонстрация приведенная в данной статье выполнялась в среде дистрибутива Linux Mint 22🌱 (Ubuntu 24🦍). Аналогичным образом все будет работать и в других популярных дистрибутивах Linux☝️. Погнали🏎. Если вы много времени проводите в консоли/терминале Linux🧑‍💻, то вероятно слышали про инструменты, которые облегчают взаимодействие с командной строкой и выводят “юзер экспириенс” на “новый уровень”🤔. Один из таких инструментов — оболочка ZSH и созданный умельцами фреймворк для ее простого и удобного конфигурирования — oh-my-zsh🔥. Ранее я достаточно много времени потратил на приведение испо
Оглавление
Тонкая настройка .zshrc при использовании oh-my-zsh
Тонкая настройка .zshrc при использовании oh-my-zsh

Исходный сайт представленного материала: 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;
  • sudo — быстрое выполнение последней/текущей команды с sudo через двойное нажатие Esc;
  • docker, kubectl — вспомогательные команды для Docker и Kubernetes;
  • 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 команда не выполняется, а вводится в качестве следующей команды, но без выполнения, чтобы ее можно было отредактировать при необходимости.

Как выглядит работа такой команды/функции:

-2

Вам остается лишь наполнить массив cmd_list своими командами, в формате:

short_name "long_command"

Чувствительные для оболочки спец. символы, используемые в сложных командах — нужно экранировать. В каких-то случаях с помощью кавычек, в иных обратной косой чертой. Пример: \$

ПРИГЛАШЕНИЕ ОБОЛОЧКИ👋

Убрано отображение user@host из приглашения оболочки, если используется графическая среда.

Теперь переходим к подготовке и установке.

Подготовка

Установка необходимых пакетов

Предварительно нам необходимо установить саму оболочку zsh, утилиту для взаимодействия с веб curl и систему контроля версий git:

sudo apt update && sudo apt install -y git curl zsh

-3

Также (опционально) рекомендую установить утилиты для подсветки терминального вывода и удобного поиска:

sudo apt install -y bat exa fzf || sudo apt install -y bat eza fzf

-4

Установка 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. Команда универсальна.
-5

После установки шрифта, активируйте его в настройках вашего терминала🛠.

В Gnome-terminal это делается так:

-6

Скачивание и применение готовой конфигурации .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

-7

Отлично👏.

Если вы в десктопном сеансе, у вас будет минималистичный prompt:

-8

В ином случае он будет таким:

-9

Консольный же сеанс будет с использованием темы без иконок:

-10

На данный момент мы просто запустили оболочку zsh в текущем сеансе☝️. Чтобы сделать zsh вашей оболочкой по умолчанию (если это не так) выполните команду:

[[ $SHELL == *zsh ]] || chsh -s /usr/bin/zsh

-11

Готово. Для корректного применения изменений рекомендуется выйти из текущего сеанса и зайти заново🚶‍➡️.

Ну и парочка скриншотов под спойлером

Tab

-12
-13

Ctrl+r

-14

history

-15

Пример работы bat и exa:

cat ~/.bashrc

-16

less ~/.zshrc

-17

tailf /var/log/apt/history.log

-18

ls -la

-19

Послесловие

В этот раз мы детально рассмотрели, как настроить поведение оболочки ZSH в файле .zshrc при использовании популярного фреймворка oh-my-zsh😌.

На мой взгляд, кастомизация своего рабочего пространства (в т.ч. оболочки) значительно увеличивает эффективность🧑‍💻. Если конечно не заниматься этим фанатично😉. Многие игнорируют данный момент, предпочитая дефолтные настройки. Не могу сказать, что это плохо, просто имея некоторый опыт уяснил для себя: лучше потратить немного (или много) времени на настройку👨‍🔧 и просто пользоваться полученным конфигом везде, где возможно, тем самым решая различные задачи с большим удобством и меньшим количеством нервов😎.

Например, при вводе команды в терминале постоянно забываешь (или не знаешь🤷‍♂️), какие ключи у нее есть и что они делают. Приходится прерывать ввод, чтобы посмотреть справку. В случае моей конфигурации, для большинства популярных команд, достаточно просто нажать Tab, чтобы увидеть подсказку по ключам, которые еще и можно “протабать”👌. Сюда же относится удобство работы с историей команд и так далее😏.

Спасибо, что читаете 😊. Обязательно заглядывайте в нашу телегу: @r4ven_me, чтобы не пропустить новые публикации на сайте. А если остались вопросы – добавляйтесь в Вороний чат. У нас там дружелюбное микросообщество 🚶‍♀️🐧🚶🐧🚶‍♂️🐧 и я периодически пересылаю туда разные интересные новости из мира IT.

Используемые источники