Когда я был еще джуном, старшие разработчики настоятельно советовали мне перейти на 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 тоже есть плагин, просто я не пишу на ларе
Давайте разберем, какую именно пользу можно из них почерпнуть
git
Регистрирует в оболочке большущий сет алиасов и функций. То что я запомнил и использую:
-gl
вместоgit pull
-gp
вместоgit push
-gcb
вместоgit checkout -b
На отображение текущей ветки в терминале наличие этого плагина не влияетcomposer
Все что делает, это регистрирует свои алиасы. Из полезного imho:
-c
вместоcomposer
-ci
вместоcomposer install
-cu
вместоcomposer update
Остальные плагины делают ровно то же самое, найти списки их алиасов можно в репозитории
Часто вижу, что подобные алиасы для докера/композера/гита разработчики часто сами регистрируют, но можно жить проще!
На отображение промпта оболочки влияют темы:

Самой известной является powerlevel10k
, после установки она запустит свой wizard, в котором вы сможете настроить отображение промпта по шагам (цвета, иконки и прочее)
Единственное, я бы рекомендовал, если ваш терминал отображает весь путь к текущей папке от домашней директории, поставить в конфиг файле ~/.p10k.zsh
опцию POWERLEVEL9K_SHORTEN_STRATEGY
в значение truncate_to_last
, будет отображать только название папки в которой находитесь (как на моих скринах)
Подводя итоги — автокомплит и алиасы здорово экономят время и нервы (вас же тоже бесит печатать docker compose blablabla
?).
Вдобавок zsh красивее, чем bash, и чем-то неуловимо приятнее
Скрытый текст
Понравилась статья? Подписывайся на мой [тгк](https://t.me/+rPaGqfiAC-QwNTI6)
Делитесь своими лайфхаками по настройке zsh :-)