Связь между исполняемым скриптом zsh и конфигурацией compsys / zstyle

Я написал простой скрипт завершения для команды cheat так что при использовании cheat в командной строке zsh будут автозаполнять аргументы.
(очевидно), это необходимо было установить в совместимом compinit / compsys:

файл: ~/system/dev_resources/zsh_comp/_cheat

 #compdef cheat [bulk of code...] # make call into compsys to provide completion! _describe 'values' comp_cands_arr 

используйте скрипт для zsh через ~/.zshrc :

 fpath=(~/system/dev_resources/zsh_comp $fpath) autoload -U ~/system/dev_resources/zsh_comp/*(:t) 

Скрипт завершения работает отлично – никаких проблем.
Теперь я просто хочу ссылаться и настраивать этот скрипт завершения через встроенный zstyle .
Раздел КОНФИГУРАЦИЯ СИСТЕМЫ ЗАВЕРШЕНИЯ в документации zsh compsys говорит нам:

Когда попытка завершения выполняется где-то в командной строке, система завершения начинает строить контекст […]
Поля всегда в порядке
,
: завершение: Функция: завершивший: команда: аргумент: тег

а также

[completeter] В настоящий момент активен активный элемент, имя функции без главного подчеркивания и другие символы подчеркивания, преобразованные в дефисы. «Полное» полностью контролирует, как должно выполняться завершение;

Мой вопрос в том, что мой скрипт завершения zsh _cheat считается «дополнением» в строке контекста? т.е. будет ли это правильным / применимым?

 :completion:function:cheat:command:argument:tag ^^^^^ 

Кажется, это применимо, но в то же время скрипт _cheat не формально определен как функция оболочки, а просто свободный набор команд …

  • Почему не работает wget url / mediafile.ext> medafile2.ext?
  • Импорт априорной ОС zsh в Манджаро
  • Перезагрузка zsh при изменении размера окна терминатора
  • Могу ли я выделить текущую строку приглашения в zsh?
  • Как создать строку с недопустимыми символами юникода, в Zsh?
  • Изменение оболочки по умолчанию без привилегий chsh или администратора
  • Пробелы как разрывы строк из команды inline for loop
  • Как тихо получить пустую строку из шаблона шара без совпадений
  • 2 Solutions collect form web for “Связь между исполняемым скриптом zsh и конфигурацией compsys / zstyle”

    Ваш файл _cheat определяет функцию, называемую _cheat . Вы можете проверить это, показывая код функции ( echo $functions[_cheat] ). Когда функция автоматически загружается из файла, файл содержит код функции, как если бы было _cheat () { до содержимого файла и } после содержимого файла. (Zsh также поддерживает автозагрузку «ksh-style», где файл должен содержать определение функции плюс вызов самой функции).

    Магическая первая строка #compdef найденная в файле в $fpath когда инициализирована система завершения, эквивалентна вызову compdef _cheat cheat где _cheat – это имя файла (и функция автозагрузки), а cheat – это имя команды, в которой эта функция для использования. Связь записывается в ассоциативном массиве _comps ( $_comps[cheat]=_cheat ).

    completer поле в zstyle контекста zstyle – это имя функции завершения с удаленным zstyle подчеркиванием.

    В ответ на вопрос

    мой скрипт завершения zsh _cheat считается «дополнением» в строке контекста?

    Ответ кажется, что нет
    Если вы используете ESC 2 , CTRL + x , h, чтобы сбрасывать контекст завершения zsh

     % cheat b tags in context :completion::complete:cheat:: values (_describe _cheat) 

    Вы можете видеть, что zsh считает, что третье / полное положение принадлежит к полному «завершенному», а cheat назначается четвертая или command позиция.
    Важно отметить, что это командный cheat (фактическая исполняемая программа), а не функция завершения _cheat , функция завершения _cheat
    является значением, определяемым zstyle встроенным zsh.

    Linux и Unix - лучшая ОС в мире.