Дополнения (completitions)

Дополнения обеспечивают набор строк за вас. Они могут быть в разных формах, но для их выполнения (обычно) используется клавиша TAB.

В Zsh дополняться может все что угодно: имена и пути файлов; имена встроенных и внешних команд, а также их ключи; имена переменных среды; имена пользователей и компьютеров, а также многое другое. Zsh имеет в своей поставке некоторое количество определений дополнений для основных программ операционных систем. Для первоначальной настройки дополнений, вам необходимо лишь вставить команду compinit в ваш файл инициализации, после чего Zsh сможет использовать дополнения для тех команд, настройка для которых имеется в поставке Zsh.

Виджеты дополнений

Виджеты дополнений определяются с помощью ключа -C встроенной команды zle, которая предоставляется модулем zsh/zle.

Дополнения с использованием compctl

Данный метод аналогичен по настройке тем дополнениям, что применяются в csh & tcsh и является устаревшим, так что новые пользователи скорее всего предпочтут использовать другие методы определения дополнений, но он все равно поддерживается текущими версиями Zsh.

Задание дополнений с помощью данного метода имеет общую форму:

        compctl ключи [command ...] 

Определение дополнения начинается с ключевого слова compctl и заканчивается списком команд для которых будет действовать дополнение.

Ключи определяют типы параметров, которые будут подпадать под дополнение (ключи командной строки, списки выполняемых заданий, и т.п.).

Ключ -k указывает, что параметры, которые будут дополняться, будут переданы в массиве. Это ключ очень полезен, когда у вас списки параметров приведены в файле, или заданы в явной форме. Так, можно явно задать список серверов, имена которых будут дополняться при использовании команды ssh:

        compctl -k "( server1 server2 )" ssh 

В том случае, если у вас много серверов, то вы можете перечислить их в файле и вместо явного перечисления указать в скобках команду для получения содержимого нужного файла (в нашем примере пусть это будет ~/.servers):

        compctl -k "( ` cat ~/.servers ` )" ssh     

Ключ -K позволяет пользователю указать функцию, которая будет вызываться для получения списка дополняемых параметров.

Другие ключи команды compctl описаны в справочном руководстве по Zsh.

Подсистема дополнений

Эта подсистема является новой и введена начиная с версии 4.0. При этом для пользователей остается доступной старая подсистема дополнений с использованием команды compctl, однако можно запретить ее использование с помощью команды:

        zstyle ':completion:*' use-compctl false      

Основным отличием новой системы дополнений от старой является то, что вместо того, чтобы задавать все настройки разом при запуске командного процессора, соответствующие части кода будут вызываться только тогда, когда будет нажата клавиша TAB, при этом будут генерироваться новые дополнения. Также введены новые команды, которые заменяют использование команды compctl с разными ключами, например, для задания списка дополнений должна использоваться команда compadd.

Поведение команд зависит от используемого контекста, что позволяет генерировать разные списки дополнений для разных контекстов. Эта возможность, как и остальные, управляются с помощью команды zstyle. Например, можно выдавать список дополнений в виде меню, перебирать их циклически, а также построить небольшой менеджер файлов с помощью стандартных команд Zsh.

Полное описание всех возможностей новой системы дополнений можно найти в руководстве пользователя Zsh.