Zsh. Автодополнение

Автодополнением клавишей Tab команд, частично введённых в ответ на приглашение оболочки, трудно удивить пользователей bash или tcsh. Столь же естественно, что при возможности безальтернативного дополнения именно оно и происходит, а при наличии некоторых альтернатив выводятся возможные варианты. Однако zsh идёт дальше -- и после вывода таковых в ответ на последующие нажатия клавиши табулятора начинает автоматический их перебор.

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

Это особенно эффектно просматривается на примере команды man. Так, чтобы вызвать полное экранное руководство по zsh, достаточно набрать

$ man zsha

и нажать табулятор, чтобы развернуть его до полного

$ man zshall

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

$ find / -na

будет автоматически дополнена до

$ find / -name

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

$ find / -name filename -

и выбрать необходимое действие из предложенного списка, Например, print -- вывод на экран, или exec -- исполнение сторонней команды.

Забегая вперёд, замечу: правила использования шаблонов в zsh в ряде случаев позволяют обойтись без команды find вообще: команда вида

[alv@alv]~% ls **/*.html

выведет список всех файлов с суффиксом html, начиная с текущего каталога и до упора.

И ещё маленькое отступление: приглашение командной строки вида [host@user]~% используется в zsh для сеанса пользователя по умолчанию. Но возможности модификации его -- поистине безграничны.

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

Однако один вариант автодополнения остаётся, насколько мне известно, уникальным для zsh: развертывание путей при сокращенном их наборе. Так, чтобы просмотреть содержимое каталога /home/data/work/soft/, в командной строке достаточно набрать

$ ls /h/d/w/s

и нажать клавишу табуляции: сокращенный ввод пути (разумеется, при безальтернативности оного) будет автоматически развернут до полного

$ ls /home/data/work/soft/

В целом вопрос автодоплнения заслуживает специальной страницы, которую мы и почитаем, когда дело дойдёт до настроек zsh.

. .