Это, пожалуй, самая известная и частоиспользуемая в 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 и /urs вместо /usr, то zsh укажет вам, что вы ошиблись. В ваших руках также возможность настроить запрос на коррекцию, для этого достаточно присвоить нужное значение переменной 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 я использовал лишь раз, но мне показалось это интересным и я все-таки позволил себе упоминуть об этом здесь ;))
На русском:
На английском:
* цитата из статьи Алекса Отта