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

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.

  • Почему диапазон расширения скобок использует две точки вместо трех (эллипсис)?
  • Тест на существование функции, которая может работать как на bash, так и на zsh?
  • ZSH: В чем разница между `.` и` source`?
  • Сделать zsh завершение показать первое предположение на той же линии (например, рыбы)
  • Без учета . и .. из результатов поиска и ls
  • Как я могу «сшить» псевдонимы оболочки?
  • Выполнение zsh rehash после сборки
  • Выводить несколько файлов из одного grep?
  • Многомесячный просмотр в календаре (cal) в OS X
  • Сценарий bash / zsh не вызывается из терминала в FreeBsd, ни в bash, ни в zsh
  • Как перечислить все папки в каталоге, не начиная с символа L?
  • zsh уведомление об электронной почте (в maildir)
  • Interesting Posts

    Просмотр удаленного рабочего стола Ubuntu с Windows 7

    Минимальное диалоговое окно настроек xfce4-display-settings не отображает параметр «перейти вправо»

    Почему vimdiff так медленно?

    Linux не может распознать правильный пароль при ssh'ing?

    Как обеспечить FTPeS использование безопасного соединения?

    Как узнать, какая версия ядра будет содержать исправление ошибок?

    Escape hash mark (#) в / etc / environment

    Есть ли LC_COLLATE, который сортирует точку перед тире?

    Существуют ли сценарии дедупликации, использующие btrfs CoW в качестве дедупликации?

    Команды трубопровода, изменить запись stdin в stdout

    Должны ли скорости / кешировать настройки в файл виртуального хоста или конфигурацию apache?

    Видео-инвертирование подсказки bash

    Почему нет новой строки в конце цитирования подоболочки и передачи результатов для эха?

    Передача mp3-файлов с удаленного сервера через cronjob в RPi без перезаписи

    Почему рабочий стол Lumina не загружается?

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