Zsh. Автоконфигурирование
Программа автоматической настройки zsh
стартует при первом запуске её интерактивного экземляра в том случае, если в домашнем каталоге данного пользователя не обнаруживается ни одного из конфигурационных файлов этой оболочки, таких, как .zshenv
, .zprofile
, .zshrc
или .zlogin
.
Часто так оно и бывает. Однако в некоторых дистрибутивах Linux, например, в Fedora, при создании пользовательского аккаунта с zsh
в качестве login shell в его домашнем каталоге автоматически создаётся файл ~/.zshrc
. Как уже говорилось, этот файл можно принять за основу собственного конфига -- он устроен вполне разумно (хотя и не включает всех полезных опций). Но сейчас наша задача -- пройти автоматическую настройку нашего нового шелла от начала до конца, не так ли?
Так что переименовываем умолчальный конфиг, если он имеется:
$ mv .zshrc zshrc_default
и авторизуемся в сеансе пользователя zshuser
заново. После чего видим следующую картину:
Смысл вариантов выбора понятен:
- q -- выход из программы конфигурирования без совершения каких-либо действий;
- 0 -- выход с созданием пустого конфига
~/.zshrc
, подлежащего в дальнейшем ручной доводке; - 1 -- переход к главному меню конфигурационной программы.
Разумеется, в данный момент нас интересует третий вариант. Он вызывает меню следующего содержания:
Смысл трёх последних пунктов понятен -- и мы их игнорируем. А вот четыре "значимых" пункта рассмотрим последовательно.
Итак, для начала пункт 1 -- установка опций истории команд:
- число команд, сохраняемых в буфере во время сеанса (
HISTSIZE
), - имя файла, хранящего историю команд,
- число команд, сохраняемых в файле истории по завершении (
SAVEHIST
).
Здесь нам не остаётся ничего иного, чем согласиться со значениями, предлагаемыми конфигуратором:
Впрочем, они и вообще подходят по жизни, хотя значения для HISTSIZE
и SAVEHIST
потом, при редактировании конфига, увеличиваю до 5000. Их рекомендуется делать равными, и очевидно, что устанавливать SAVEHIST
больше, чем HISTSIZE
, бессмысленно.
Теперь, выбирая "нулевой" вариант, мы запоминаем установки и возвращаемся в главное меню. Записи конфига при этом ещё не происходит -- но в главном меню соответствующий пункт будет помечен как изменённый (Unsaved changes):
Чтобы больше не повторяться, скажу, что это относится и ко всем остальным пунктам главного меню -- запись итогового конфига произойдёт только по завершении всех настроечных мероприятий.
Пунктом 2 идёт настройка новой системы автодополнений (compsys) -- именно она и обеспечивает всё богатство возможностей zsh
в этой области, так что отказываться от неё выбором "нулевого" варианта нет никакого резона:
Но начнём мы, однако, с варианта первого, предлагающего некоторые умолчальные опции автодополнений. А к подпункту 2 -- более тонкой настройке -- вернёмся чуть позже.
Вернувшись после этого в главное меню, обращаемся к пункту 3 -- определению стиля редактирования командной строки. Здесь таковым предлагается стиль Emacs (определяемый опцией bindkey -e
), общепринятый по умолчанию во всех командных оболочках. чтобы согласиться с этим, следует выбрать "нулевой" вариант:
Если же он нас не устраивает, выбрав пункт 1, можно изменить его на редактирвоание в стиле vi:
Должен, однако, заметить, что все лично известные мне знатоки и ценители редактора vi/Vim для работы в командной строке, тем не менее, предпочитают Emacs.
Пункт 4, к которому мы обратимся после очередного возврата в главное меню, очень важен. Поэтому рассмотрим его подпункты последовательно:
В первом подпункте устанавливается опция autocd
:
Если включить её, а потом, уже вручную, задать значения переменной cdpath
в виде путей к часто используемым каталогам, то переходить в них командой cd
можно будет без набора полного пути, ограничиваясь указанием последнего из вложенных подкаталогов. То есть, для перехода в каталог, например, /home/data/media/video
, достаточно будет дать
$ cd video
Подпунктом 2 устанавливается опция extendedglob
-- благодаря ей символы #
, ~
и ^
будут восприниматься как часть шаблонов при генерации имён файлов:
Примеры использования этой опции можно найти в документации:
man zshexpn
или в файле /usr/share/doc/zsh-html-4.3.10/Expansion.html -- это его адрес на локальной машине при установке соответствующего пакета.
Подпункт 3 определяет опцию appendhistory
, предписывающую добавлять новые команды к существующему файлу истории, а не перезаписывать последний:
Опция nomatch
, устанавливаемая в подпункте 4, выдаёт сообщение об ошибке при несовпадении шгаблона с генерируемым именем файла:
В подпункте 5 включается или отключается звуковой сигнал при ошибке редактирования командной строки:
И, наконец, последний из нумерованных, подпункт 6. Он устанавливает опцию notify
-- сообщать об изменениях в фоновом режиме:
Очевидно, что почти все из перечисленных опций, даже те, смысл которых пока не очень ясен (но проясниться со временем), как минимум, не вредны. А некоторые так и очень полезны. Так что имеет смысл включить всё перечисленное. За единственным исключением -- подачи звукового сигнала, он достаточно противный, особенно в ночное время.
Теперь остаётся благополучно миновать главное меню, которое предупреждает нас о внесённых и не сохранённых изменениях по всем пунктам:
И увековечить их из супер-главного меню:
Здесь работает именно "нулевой" выбор. Теперь, конечно, хорошо посмотреть, как наша интерактивная деятельность воплотилась в конфиге -- но этим мы займёмся на следующих страницах.
. .