Подтвердить что ты не робот

Ресурс завершения Zsh?

Завершение Zsh - довольно сложный зверь, и я нахожу man-страницу очень трудной для чтения, особенно ее отсутствующие (простые) примеры всех различных форм optspec и т.д. Мне еще ничего не удалось найти в Интернете помощь будет наиболее оценена.

В качестве примера, на что я сейчас борюсь, а man-страница zshcompsys не дает никаких пояснений. У меня

#compdef mtt2

_arguments -s : \
    '-h' '--help' \
    '-V' '--version' \
    ':foobars:(foo bar baz)'

Теперь, когда я набираю mtt2 <TAB>, мне предлагают только foo, bar и baz в качестве доработок, почему бы не -h, --help и т.д.)? Какую магию мне нужно передать на _arguments, чтобы предложить все возможности?

4b9b3361

Ответ 1

Вам нужно запустить аргумент, который вы заполняете тире (я имею в виду тот аргумент, который вы вводите для тестирования, а не аргумент _arguments). Вы должны либо взглянуть на zstyle, попробуйте передать -h, а другие просто как :foobars: или даже напрямую использовать compadd. Примеры:

  • Непосредственно использование compadd:
    #compdef test
    A=( -h --help -V --version foo bar baz )
    compadd -a A
    
  • Передача -h и другие, как :foobars::
    #compdef test
    A=( -h --help -V --version )
    _arguments \
        - foobars \
        ':foobars:(foo bar baz)' \
        - options \
        ":arguments:($A)"
    
    или
    A=( -h --help -V --version foo bar baz )
    _arguments \
        ":::($A)"
    
  • zstyle управляет стилем завершения. Он описан в разделе "КОНФИГУРАЦИЯ СИСТЕМЫ ЗАВЕРШЕНИЯ" в man zshcompsys и, вероятно, имеет опцию, которая позволит завершить работу коммутаторов, но я не знаю, какая опция управляет этим.

Ответ 2

Я нашел это хорошим введением: http://www.linux-mag.com/id/1106/

Это за таблицей входа, но вы не указали...