Автозаполнение команд с опциями "windows like" (начиная с косой черты)

Я пытаюсь написать собственный сценарий автозавершения для zsh (или bash) для команды, параметры которой начинаются с косой черты.

Например: MyCommand /foo=bar.txt /yolo=test /final=4

Я пытался использовать Zsh Helper _arguments но это не сработало

#compdef MyCommand 

_MyCommand()
{
  local curcontext="$curcontext" state line
  typeset -A opt_args

  _arguments \
    '/foo=:foo:_files'
}

_MyCommand "$@"

Но когда я заменяю / с -- это работает хорошо.

Как мне этого добиться?

1 ответ

Решение

Вы можете сделать это с помощью _regex_arguments как это:

matchany=/$'[^\0]##\0'/
_regex_arguments _mycommand "$matchany" \( /$'/foo='/ ':option:option:(/foo=)' "$matchany" ':file:filename:_files' \| /$'/yolo='/ ':option:option:(/yolo=)' "$matchany" ':optarg:optarg:(test this)' \| /$'/final='/ ':option:option:(/final=)' /$'[0-9]##\0'/ ':number:number:' \) \#
_mycommand "$@"

Вы можете прочитать больше о _regex_arguments здесь http://zsh.sourceforge.net/Doc/Release/Completion-System.html или здесь: https://github.com/vapniks/zsh-completions/blob/master/zsh-completions-howto.org

Здесь важно отметить, что в конце совпадений с шаблоном для имен опций нет нулевого символа char (\0).

Другие вопросы по тегам