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
.