Я пытаюсь согнуть zsh, свою оболочку выбора, по своей воле и полностью потерять синтаксис и работу доработок. Мой случай использования заключается в следующем: я хотел бы иметь автозаполнения «анзибль-пьес» под «-e» поддержка опции три варианта:Zsh пополнения с несколькими повторными опциями
- Нормальное завершение файла:
ansible-playbook -e vars/file_name.yml
- предваряется завершение файла:
ansible-playbook -e @vars/file_name.yml
- произвольные строки:
ansible-playbook -e key=value
Я начал с https://github.com/zsh-users/zsh-completions/blob/master/src/_ansible-playbook, которая работала прилично, но необходимые изменения для поддержки приставки файла Pathing. Для достижения этой цели я изменил следующие строки (строки -е):
...
"(-D --diff)"{-D,--diff}"[when changing (small files and templates, show the diff in those. Works great with --check)]"\
"(-e --extra-vars)"{-e,--extra-vars}"[EXTRA_VARS set additional variables as key=value or YAML/JSON]:extra vars:(EXTRA_VARS)"\
'--flush-cache[clear the fact cache]'\
к этому:
...
"(-D --diff)"{-D,--diff}"[when changing (small files and templates, show the diff in those. Works great with --check)]"\
"(-e --extra-vars)"{-e,--extra-vars}"[EXTRA_VARS set additional variables as key=value or YAML/JSON]:extra vars:__at_files"\
'--flush-cache[clear the fact cache]'\
и добавил функцию '__at_files':
__at_files() {
compset -P @; _files
}
Это может быть очень noobish, но для тех, кто никогда не сталкивался с этим раньше, я был доволен, что это решило мою проблему, или так я думал.
Это не работает, если у меня есть несколько параметров «-e», что является полностью поддерживаемой моделью (подобно тому, как докеры допускают несколько аргументов -v или -p). Это означает, что первый параметр «-e» будет иметь мою префиксную работу по завершению, но любые параметры «-e» после этой точки становятся «тупыми» и позволяют только завершить нормальные «_files» из того, что я могу сказать. Таким образом, следующий не будет успешно завершена:
ansible-playbook -e key=value -e @vars/file
, но это будет для завершения самого файла:
ansible-playbook -e key=value -e vars/file
ли я запутались? Я вижу один и тот же тип поведения для опции «-M» данного плагина завершения (он также становится «немым» и выполняет базовое завершение файла). Возможно, я просто не искал правильную терминологию или комбинацию терминов, или, может быть, в довольно сложной документации не хватало того, что покрывает это, но опять же, всего лишь за несколько дней опыта в этом, я теряюсь.