Минимальная настройка zsh

Как и большинство людей, начинавших свое знакомство с Unix системами с FreeBSD, я долгие годы пользовался командным интерпретатором bash и не планировал ничего менять. Но за меня все решили в Apple, когда заменили в своих ОС интерпретатор по умолчанию с bash на zsh. И можно было бы обратно перейти на bash, но стало любопытно, а почему именно он, а что он может и вообще зачем.

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

Ну и несколько полезных примеров, для ее первоначальной настройки – ниже.

Файл конфигурации zsh

Все настройки пользователя хранятся в файле .zshrc в домашней директории. Поэтому если нужно что-то изменить, то править нужно именно его.

Настройка приглашения

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

Для этого в файле конфигурации нужно задать значение переменной PROMPT.

Мой PROMPT выглядит так:
PROMPT="%B%10F%n%15F@%9F%m%b%f:%11F[ %1d%f ] \$ "

А отображается это вот так:

Так же у zsh существует правый промт, который исчезает при вводе длинных команд. Его удобно использовать например для отображения полного пути относительно корня или для отображения текущего времени. Задается путем указания значений для переменной RPROMPT

Полезные значения:

СокращениеВыводПример
%mhost namelocalhost
%Mfull host namelocalhost.local
%nuser namepi
%?Return status of last command0
%dCurrent working directory/etc
%~Current working directory from $HOME~/work
%Dyy-mm-dd22-12-31
%Wmm/dd/yy12/31/22
%T24-hour13:45
%wday-ddSun 17

Цвета для каждого параметра можно задавать так как это сделал я, либо же использовать более читабельный вид. Например для отображения имени хоста красным цветом, нужно записать это так:
%F{red}%m%f
А если мы хотим вывести это красным и жирным, то так:
%B%F{red}%m%f%b

Помимо этого, можно изменить цвет фона для вывода текста. Например, что бы вывести имя хоста красным на белом, это нужно записать так:
%K{white}%F{red}%m%f%k

Цвета доступные для указания по имени:
black, red, green, yellow, blue, magenta, cyan, white

В моем примере можно заметить, что у меня указано не просто %d, а %1d – это обозначает, что мне нужно здесь видеть только название текущего каталога, а не полный путь к нему. Если указать %2d, то при переходе например в /usr/local/bin, отображаться будет local/bin. Принцип я думаю понятен.

Конструкции выглядят пугающе, но хорошо, что обычно это требуется настроить под себя только один раз.

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

Полезные фишки

Так же для zsh существует множество полезных фишек и команд, уверен, что я не знаю и 10% от них всех, но вот что я использую:

ОпцияНазначение
AUTOCDПозволяет переходить в каталог, не используя команду cd, а просто набирая его имя
CORRECTALLКорректирует команды и аргументы к ним (те, о которых известно). В случае опечатки предложит наиболее подходящий вариант.
HISTIGNOREDUPSНе сохраняет дубликаты команд в файл истории
NOCLOBBERПозволяет избежать случайной перезаписи существующего файла при выводе потока в >. Если файл действительно требуется перезаписать, то нужно использовать оператор >!

compinit – позволяет zsh выполнять автоподстановки по Tab, для MacOS с ее повышенным уровнем паранойи требуется загружать этот модуль чуть иначе, см. пример моего файла ниже.

bindkey '^R' history-incremental-search-backward – это позволяет производить поиск по истории команд при нажатии на Ctrl-R

!?часть_команды TAB – выполнит похожее действие, а именно: найдет в истории команд ближайшую команду в которой присутствует введеный тест и вставит ее в строку ввода.

alias – позволяет создать алиасы для сокращения часто используемых команд. Например у меня в алиасах есть flushdns для сброса кеша DNS в MacOS, а так же короткие алиасы для вызова ssh к разным серверам.

Пример моего .zshrc для MacOS

$ cat .zshrc                                                                                             
ENABLE_CORRECTION="true"
plugins=(git node bundler osx rake ruby python javascript bash zsh-syntax-highlighting)

setopt autocd
setopt correctall
autoload -Uz compinit -i  && compinit -i
bindkey '^R' history-incremental-search-backward

PROMPT="%B%10F%n%15F@%9F%m%b%f:%11F[ %1d%f ] $ "
RPROMPT="[ %W %* %F{yellow}%B%d%b%f ]"

alias flushdns='sudo killall -HUP mDNSResponder'

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *