В этой заметке приводится несколько очень полезных, на мой взгляд, советов по настройке командной оболочки zsh.
Это, пожалуй, самая известная и частоиспользуемая в zsh функция, выгодно отличающая его от других командных интерпретаторов.
Помимо простого дополнения имен и путей к файлам zsh также способен дополнять опции к командам (попробуйте, к примеру,
find . -na<Tab> -s<Tab>), названия страниц руководств (man chkc<Tab> дополнится до man chkconfig) и раскрывать сокращенные
пути (к примеру, /mn/o/d/a<Tab> раскрывается до /mnt/other/distrib/alt).
Чтобы включить это продвинутое автодополнение, вам нужно добавить в конфигурационный файл zsh (~/.zshrc) следующие строки:
Замечу, что пользователям ALT Linux этого делать не потребуется, так как данная возможность включена по умолчанию (см. /etc/zshrc)
Выбор вариантов можно оформить в виде меню с подсветкой текущего варианта. Простой пример:
Разноцветные пункты меню в зависимости от типа об'екта. Тоже простой пример из info zsh:
По умолчанию автодополнение для kill и killall не показывает процессы без controlling tty (для всех пользователей кроме root).
Устраняем этот недостаток и дополнительно добавляем «красоты»:
Про автодополнение для ssh/scp написано ниже.
За внешний вид приглашения отвечает переменная PROMPT (а не PS1, как в bash!). Все возможные специальные последовательности,
которые возможно использовать в приглашении, описаны в man zshmisc в главе PROMPT EXPANSION. К примеру, вы можете,
для начала, установить (если оно еще не установлено) самое обычное приглашение:
Подробнее о том, что означает каждая из специальных последовательностей, вы можете узнать в странице руководства ;)
Еще одна удобная особенность: приглашение может быть выведено не только в левой части экрана, но и в правой! За это отвечает
переменная RPROMPT.
После этого в правой части командной строки вы будете видеть текущее время.
Если вы хотите придумать оригинальное и удобное приглашение, то сначала я рекомендую вам взглянуть на уже существующие. Вдруг там
вы найдете подходящую или решите позаимствовать из понравившийся нужный элемент. Выполните следующие команды:
В результате вы увидите список из 15 предустановленных тем для приглашения. Попробовать понравившуюся можно командой
promptinit название_темы Команда prompt -p выдает примеры всех установленных тем строки приглашения.
Обычно при работе в терминале приходится довольно часто перемещаться по директориям. И каждый раз приходится вводить
cd /path/to/file Но разработчики zsh подумали, что использование этой команды нужно как-то упростить и придумали autocd!
Смысл прост: вместо cd /path/to/file вам нужно ввести лишь путь! Чтобы уже начать пользоваться этой удобной возможностью,
добавьте еще одну строчку в ~/.zshrc:
Еще один способ, чтобы быстрее перемещаться по иерархии каталогов. Этот способ чем-то напоминает создание alias'ов (псевдонимов)
для команд. Для этого вам нужно прописать в конфигурационный файл часто посещаемые вами пути к файлам и соответствующие им
имена. К примеру, вот так:
Теперь можно будет вместо /mnt/other/distrib набрать его имя ~dist При этом здесь также действует и автодополнение имени,
и к низлежайшим файлам/каталогам.
Кроме обычных псевдонимов существуют также глобальные. Их использование лучше всего рассмотреть на примере. Вот часть конфига zsh,
в которой определяются глобальные псевдонимы:
Теперь для того, чтобы узнать установлен ли в вашей системе пакет example будет достаточно ввести: rpm -qa G example. Вместо 'G'
zsh подставит '| grep' и таким образом вы найдете нужный пакет в списке всех установленных. Таким же образом используются и другие
глобальные псевдонимы из примера:
Данная команда найдет все пакеты с ядром и модулями к нему для однопроцессорной машины, отсортирует список и передаст less,
чтобы вам было удобнее его просмотреть.
Еще один интересный вид псевдонимов – псевдонимы расширения (suffix aliases). Эти псевдонимы позволяют расширить команду
вида name.ext до program name.ext. Например, если в файле конфигурации прописать:
команда movie.avi будет расширена до mplayer movie.avi
«Zsh позволяет производить рекурсивное раскрытие имен файлов. Для этого используются формы **/ и ***/ Первая форма
отличается от второй лишь тем, что не следует по символьным ссылкам. Так, например
произведет поиск файлов с именем foo во всех подкаталогах.»*
Иногда при вводе команд мы допускам ошибки. Причем не очень серьезные. В zsh есть способ, как быстро возможно разрешать
подобные ситуации — автокоррекция команд. Включаем ее:
После этого, если вы введете sl вместо ls, то zsh вежливо поинтересуется, не желаете ли вы ввести ls вместо sl.
Но это еще не все. В ваших руках даже возможность настроить запрос на коррекцию, для этого достаточно присвоить нужное значение
переменной SPROMPT Вот, к примеру, как это настроено у меня:
Если zsh запущен в каком-либо псевдотерминале (xterm, aterm и т.д.), то возможно управлять заголовком окна. Т. е. вы можете попросить
zsh выводить в него что-нибудь полезное. Вот пример (добавьте в ~/.zshrc):
Здесь проверяется значение переменной $TERM, и если оно равно rxvt или начинается с xterm, то выполняется действие. В частности,
задается функция, которая и выводит строку, похожую на приглашение, в заголовок окна. Функция precmd() выполняется каждый
раз перед выводом приглашения. Также вы можете использовать функцию preexec(), которая выполняется перед запуском любой
программы, и chpwd(), которая «вызывается при изменении рабочего каталога. [...] Кроме того, может быть определена функция
periodic, которая может выполнятся через каждые $PERIOD (если этот параметр определен) секунд перед выводом приглашения.»*
Быть может, вам покажется удобным выводить имя запущенной программы? Тогда вместо третьей строчки напишите
Zsh умеет частично эмулировать Vim/Emacs при редактировании командной строки. Команды bindkey -v и bindkey -e
соответственно загружают необходимые раскладки клавиш.
Теперь, если нажать Ctr+X Ctrl+Z, при вводе команды будет автоматически производится поиск в истории по первым буквам команды.
Нажатие Ctrl+Z отключит этот режим.
В поставке zsh идет несколько интересных модулей.
Тетрис :)
Потом жмем Ctrl-T и играем :) Вместо ^T можно использовать любое другое сочетание клавиш. Выход – q.
Калькулятор
Текстовый редактор
Управление – как в vim или emacs в зависимости от используемого в командной строке режима (см. выше).
Подсмотрено у virtuoso на #debian-russian:
Однако этот способ имеет несколько неисправимых преимуществ. Более «кошерный» вариант предложен в виде патча здесь. Можно настроить и локально, для «себя любимного». Для этого:
1. Создать каталог ~/.zsh/functions
2. Положить _known_hosts и пропатченый _ssh в этот каталог
3. В ~/.zshrc добавить:
По умолчанию для ssh/scp и им подобных дополняются и хост и пользователь. Отключить отображение пользователей в списке
вариантов (не отключая самой возможности дополнять их) можно так:
Если вам требуется отредактировать какой-нибудь скрипт, который расположен в $PATH или же просто использовать полный путь к
програме, то zsh способен отыскать требуемую программу и использовать полный путь к ней. К примеру, чтобы отредактировать файл
script достаточно будет ввести:
В zsh еще очень много разных удобных и полезных функций и настроек. В этой заметке я попытался рассказать о той их части, о которой
мне известно и которая наиболее часто используется мной (хотя promptinit я использовал лишь раз, но мне показалось это интересным
и я все-таки позволил себе упоминуть об этом здесь ;))
На русском:
http://linuxshop.ru/unix4all/?cid=26&id=209
http://www.opennet.ru/base/dev/zsh_setup.txt.html
http://xtalk.msk.su/~ott/ru/linux/zsh/Zsh-article.ru.html
На английском:
http://www.faqs.org/faqs/unix-faq/shell/zsh/
http://adamspiers.org/computing/zsh/
http://www.daemonnews.org/199910/zsh.html
http://zsh.sourceforge.net/Guide/zshguide.html
http://www-106.ibm.com/developerworks/library/l-z.html
http://www.acm.uiuc.edu/workshops/zsh/toc.html
* цитата из статьи Алекса Отта