Zsh. Автоконфигурирование

Программа автоматической настройки zsh стартует при первом запуске её интерактивного экземляра в том случае, если в домашнем каталоге данного пользователя не обнаруживается ни одного из конфигурационных файлов этой оболочки, таких, как .zshenv, .zprofile, .zshrc или .zlogin.

Часто так оно и бывает. Однако в некоторых дистрибутивах Linux, например, в Fedora, при создании пользовательского аккаунта с zsh в качестве login shell в его домашнем каталоге автоматически создаётся файл ~/.zshrc. Как уже говорилось, этот файл можно принять за основу собственного конфига -- он устроен вполне разумно (хотя и не включает всех полезных опций). Но сейчас наша задача -- пройти автоматическую настройку нашего нового шелла от начала до конца, не так ли?

Так что переименовываем умолчальный конфиг, если он имеется:

$ mv .zshrc zshrc_default

и авторизуемся в сеансе пользователя zshuser заново. После чего видим следующую картину:

zsh01.png

Смысл вариантов выбора понятен:

  • q -- выход из программы конфигурирования без совершения каких-либо действий;
  • 0 -- выход с созданием пустого конфига ~/.zshrc, подлежащего в дальнейшем ручной доводке;
  • 1 -- переход к главному меню конфигурационной программы.

Разумеется, в данный момент нас интересует третий вариант. Он вызывает меню следующего содержания:

zsh02.png

Смысл трёх последних пунктов понятен -- и мы их игнорируем. А вот четыре "значимых" пункта рассмотрим последовательно.

Итак, для начала пункт 1 -- установка опций истории команд:

  • число команд, сохраняемых в буфере во время сеанса (HISTSIZE),
  • имя файла, хранящего историю команд,
  • число команд, сохраняемых в файле истории по завершении (SAVEHIST).

Здесь нам не остаётся ничего иного, чем согласиться со значениями, предлагаемыми конфигуратором:

zsh03.png

Впрочем, они и вообще подходят по жизни, хотя значения для HISTSIZE и SAVEHIST потом, при редактировании конфига, увеличиваю до 5000. Их рекомендуется делать равными, и очевидно, что устанавливать SAVEHIST больше, чем HISTSIZE, бессмысленно.

Теперь, выбирая "нулевой" вариант, мы запоминаем установки и возвращаемся в главное меню. Записи конфига при этом ещё не происходит -- но в главном меню соответствующий пункт будет помечен как изменённый (Unsaved changes):

zsh03a.png

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

Пунктом 2 идёт настройка новой системы автодополнений (compsys) -- именно она и обеспечивает всё богатство возможностей zsh в этой области, так что отказываться от неё выбором "нулевого" варианта нет никакого резона:

zsh04.png

Но начнём мы, однако, с варианта первого, предлагающего некоторые умолчальные опции автодополнений. А к подпункту 2 -- более тонкой настройке -- вернёмся чуть позже.

Вернувшись после этого в главное меню, обращаемся к пункту 3 -- определению стиля редактирования командной строки. Здесь таковым предлагается стиль Emacs (определяемый опцией bindkey -e), общепринятый по умолчанию во всех командных оболочках. чтобы согласиться с этим, следует выбрать "нулевой" вариант:

zsh05.png

Если же он нас не устраивает, выбрав пункт 1, можно изменить его на редактирвоание в стиле vi:

zsh06.png

Должен, однако, заметить, что все лично известные мне знатоки и ценители редактора vi/Vim для работы в командной строке, тем не менее, предпочитают Emacs.

Пункт 4, к которому мы обратимся после очередного возврата в главное меню, очень важен. Поэтому рассмотрим его подпункты последовательно:

zsh07.png

В первом подпункте устанавливается опция autocd:

zsh08.png

Если включить её, а потом, уже вручную, задать значения переменной cdpath в виде путей к часто используемым каталогам, то переходить в них командой cd можно будет без набора полного пути, ограничиваясь указанием последнего из вложенных подкаталогов. То есть, для перехода в каталог, например, /home/data/media/video, достаточно будет дать

$ cd video

Подпунктом 2 устанавливается опция extendedglob-- благодаря ей символы #, ~ и ^ будут восприниматься как часть шаблонов при генерации имён файлов:

zsh09.png

Примеры использования этой опции можно найти в документации:

man zshexpn

или в файле /usr/share/doc/zsh-html-4.3.10/Expansion.html -- это его адрес на локальной машине при установке соответствующего пакета.

Подпункт 3 определяет опцию appendhistory, предписывающую добавлять новые команды к существующему файлу истории, а не перезаписывать последний:

zsh10.png

Опция nomatch, устанавливаемая в подпункте 4, выдаёт сообщение об ошибке при несовпадении шгаблона с генерируемым именем файла:

zsh11.png

В подпункте 5 включается или отключается звуковой сигнал при ошибке редактирования командной строки:

zsh12.png

И, наконец, последний из нумерованных, подпункт 6. Он устанавливает опцию notify -- сообщать об изменениях в фоновом режиме:

zsh13.png

Очевидно, что почти все из перечисленных опций, даже те, смысл которых пока не очень ясен (но проясниться со временем), как минимум, не вредны. А некоторые так и очень полезны. Так что имеет смысл включить всё перечисленное. За единственным исключением -- подачи звукового сигнала, он достаточно противный, особенно в ночное время.

Теперь остаётся благополучно миновать главное меню, которое предупреждает нас о внесённых и не сохранённых изменениях по всем пунктам:

zsh14.png

И увековечить их из супер-главного меню:

zsh14a.png

Здесь работает именно "нулевой" выбор. Теперь, конечно, хорошо посмотреть, как наша интерактивная деятельность воплотилась в конфиге -- но этим мы займёмся на следующих страницах.

. .