Когда я был еще джуном, старшие разработчики настоятельно советовали мне перейти на zsh. Я помню, что я так и не получил никакой аргументации, чем zsh лучше, чем привычный bash, и какие преимущества я смогу использовать.

Что ж, в этой статье я хочу ответить на эти вопросы тем, кто еще только задается этим вопросом, с небольшим уклоном к PHP разработке

Zsh это командная оболочка, то есть программа, которая получает от пользователя команду в текстовом виде и выполняет соответствующие исполняемые файлы, найденные по путям, указанным в переменной окружения PATH.

Zsh является дефолтной оболочкой для macOS, на linux дефолт — bash. Zsh лучше, чем bash в основном благодаря своей очень обширной системе плагинов, модулей, различных тем и тд

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

brew install zsh-autosuggestions

И включив его через добавление в ~/.zshrc следующей строки

source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh

Я получаю автокомплит в терминале, подобный автокомплиту, когда пишешь код в PHPStorm:

Автокомплит основан на истории ваших запросов (можно посмотреть через history, например), из-за чего может подсказывать и неверные команды. То есть это не AI какой-нибудь, а скорее что-то вроде

history | grep "$CURRENT_INPUT"

Поэтому вы можете хотеть понастраивать хранение истории, например

#  History
# хранить историю в указанном файле
export HISTFILE=~/.zsh_history
# максимальное число команд, хранимых в сеансе
export HISTSIZE=1000
export SAVEHIST=$HISTSIZE
# включить историю команд
setopt APPEND_HISTORY
# убрать повторяющиеся команды, пустые строки и пр.
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_IGNORE_SPACE
setopt HIST_REDUCE_BLANKS

Если же я установлю еще один модуль:

brew install zsh-syntax-highlighting

И включу этот плагин аналогичным образом в ~/.zshrc

source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh

Я получу подсветку синтаксиса команд:

Здесь я ввел невалидную команду, и еще до ее сабмита я вижу где я ошибся

Zsh стоит ставить сразу вместе с Oh-my-zsh. Это своего рода менеджер плагинов

Например, у меня в ~/.zshrc прописаны следующие плагины:

plugins=(git composer symfony6 docker docker-compose)

Замечу, что git по умолчанию включен, а остальные уже я ручками добавил. Для laravel тоже есть плагин, просто я не пишу на ларе

Давайте разберем, какую именно пользу можно из них почерпнуть

  1. git

    Регистрирует в оболочке большущий сет алиасов и функций. То что я запомнил и использую:

    - gl вместо git pull
    - gp вместо git push
    - gcb вместо git checkout -b

    На отображение текущей ветки в терминале наличие этого плагина не влияет

  2. composer

    Все что делает, это регистрирует свои алиасы. Из полезного imho:

    - c вместо composer
    - ci вместо composer install
    - cu вместо composer update

  3. Остальные плагины делают ровно то же самое, найти списки их алиасов можно в репозитории

Часто вижу, что подобные алиасы для докера/композера/гита разработчики часто сами регистрируют, но можно жить проще!

На отображение промпта оболочки влияют темы:

Самой известной является powerlevel10k, после установки она запустит свой wizard, в котором вы сможете настроить отображение промпта по шагам (цвета, иконки и прочее)

Единственное, я бы рекомендовал, если ваш терминал отображает весь путь к текущей папке от домашней директории, поставить в конфиг файле ~/.p10k.zsh опцию POWERLEVEL9K_SHORTEN_STRATEGY в значение truncate_to_last, будет отображать только название папки в которой находитесь (как на моих скринах)

Подводя итоги — автокомплит и алиасы здорово экономят время и нервы (вас же тоже бесит печатать docker compose blablabla ?).
Вдобавок zsh красивее, чем bash, и чем-то неуловимо приятнее

Скрытый текст

Понравилась статья? Подписывайся на мой [тгк](https://t.me/+rPaGqfiAC-QwNTI6)

Делитесь своими лайфхаками по настройке zsh :-)

Комментарии (18)