Связь между исполняемым скриптом 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 не формально определен как функция оболочки, а просто свободный набор команд …

  • Как изменить ключ для автозаполнения в ZSH?
  • Как настроить Ctrl + w как удалить слово в zsh
  • Развернуть переменную в определении функции в zsh
  • Что эквивалентно «stty -echo» для zsh?
  • Как создать псевдоним для двух команд Git, которые используют параметр?
  • Заполнение вкладки «../» в zsh
  • Поиск шаблона в именах файлов с номером
  • Завершить только в начале слова
  • 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.

    Interesting Posts

    ls выводит несколько столбцов, даже если отправлен в grep с помощью zml-конфигурации grml

    Что означает в нижней части vim?

    различные контрольные суммы исходного файла и скопированного файла

    Нужно преобразовать столбец timestamp unix epoch в каждую строку с помощью sed или awk

    Новая почта Полученное уведомление Kmail + Jovie Speech customizing

    В чем разница `/ etc / modules-load.d` и` / etc / modules`?

    Откройте дверь SSH для нокаутирующего друга

    Показывать текстовый файл по одной странице за один раз, подождать 20 секунд, затем автоматически настроить

    Система Samba требует чтения / записи файлов с / на NAS, выпущенных из рабочего стола Windows

    Чтение аудиопотоков из интернет-радио и его переключение на временный файл

    Есть ли способ изменить файл на месте?

    Окно окна GNU переименовывает неудобство

    Запуск GNU Parallel на 2 или более узлах с планировщиком Slurm

    Как постоянно устанавливать переменные среды для одного пользователя

    NFS-сервер мгновенно отключил соединение, теперь df, ls и umount все зависают

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