2017-01-31 11 views
7

Я хотел бы, чтобы завершить для --flags после другого входа в my gradle completion script, но _arguments, кажется, требует, чтобыFix ЗШ _arguments варианты (--whatever) завершение после не-опции (noDashes) вход

спецификации, которые описывают опция флаги должны предшествовать спецификации, которые описывают не-вариант («позиционный» или «нормальный») аргументы анализируемой линии (от zsh completion docs)

других слов: command foo --o[TAB] ничего не делает, но command --o[TAB] работает отлично. Есть ли способ настроить _arguments или мне нужно использовать другие control functions?

ПРИМЕЧАНИЕ: Отдельные функции завершения не кажется, как вариант в моем случае, как входы не в фиксированном списке (Gradle задачи произвольны и несколько может быть указан, gradle myfoo mybar --o[TAB] должен работать).

+1

Посмотрите на функции завершения git, они работают так ('git clone - [TAB]' например ('--bare, --branch, ...')) –

+0

@TomRegner это хорошо Идея. Я сделаю это. –

+0

Выполнение Git (https://github.com/zsh-users/zsh/blob/master/Completion/Unix/Command/_git) использует функции завершения для каждой подкоманды (например, '_git_clone()'). В моем случае список задач Gradle является динамическим, и можно указать несколько задач, поэтому использование того же подхода не представляется возможным. Я добавлю это к вопросу. –

ответ

1

Я был в состоянии решить эту проблему с this commit, по крайней мере, чтобы параметры после указания 1 задача.

Хитрость заключается в том, чтобы установить состояние в _arguments с :->statename, сбросьте контекст следующего слова, а также обеспечить подстановочный Искатель, который соответствует не-командным словам и использовать _arguments снова.

Существует почти наверняка способ разрешить параметры, заданные после произвольного количества слов, и избежать некоторого дублирования, но это эффективный запуск.

1

Итак, вы хотите, чтобы у вас было что-то типа vim foo -[TAB] и у вас есть список авто развернуть, чтобы показать флаги и переключатели, где в настоящее время вам нужно ввести vim -[TAB], чтобы получить свои флаги и переключатели, а затем введите foo, да?

Надеюсь, я правильно понимаю ваш вопрос.

Мои текущие варианты завершения zsh могли бы помочь с этим, поскольку я могу делать то, что я описал, что, кажется, то, о чем вы просите? Я уже давно понял, что я это задал, поэтому не помню точно, что каждый делает. То, что я считаю, вы хотите, но это setopt COMPLETE_IN_WORD, unset LIST_AMBIGUOUS, а также zstyle ':completion::approximate*:*' prefix-needed false. Если я ошибаюсь, пожалуйста, исправьте меня.

Я включил то, что я использую в своем zsh, как раздел завершения. Я тестировал это как автономное, и он работает на моем zsh как есть.

#{{{ Completion Stuff 
zmodload -i zsh/complist 
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} 
bindkey -M viins '\C-i' complete-word 
# Faster! (?) 
zstyle ':completion::complete:*' use-cache 1 
# case insensitive completion 
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' \ 
    'r:|[._-]=* r:|=*' 'l:|=* r:|=*' 
zstyle ':completion:*' verbose yes 
zstyle ':completion:*:descriptions' format '%B%d%b' 
zstyle ':completion:*:messages' format '%d' 
zstyle ':completion:*:warnings' format 'No matches for: %d' 
zstyle ':completion:*' group-name '' 
# generate descriptions with magic. 
zstyle ':completion:*' auto-description 'specify: %d' 
# Don't prompt for a huge list, page it! 
zstyle ':completion:*:default' list-prompt '%S%M matches%s' 
# Don't prompt for a huge list, menu it! 
zstyle ':completion:*:default' menu 'select=0' 
# Have the newer files last so I see them first 
zstyle ':completion:*' file-sort modification reverse 
# color code completion 
zstyle ':completion:*' list-colors "=(#b) #([0-9]#)*=36=31" 
unsetopt LIST_AMBIGUOUS 
setopt COMPLETE_IN_WORD 
# Separate man page sections. 
zstyle ':completion:*:manuals' separate-sections true 
# 
zstyle ':completion:*' list-separator 'fREW' 
# complete with a menu for xwindow ids 
zstyle ':completion:*:windows' menu on=0 
zstyle ':completion:*:expand:*' tag-order all-expansions 
# more errors allowed for large words and fewer for small words 
zstyle ':completion:*:approximate:*' max-errors 'reply=( $(( ($#PREFIX+$#SUFFIX)/3 )) )' 
# Errors format 
zstyle ':completion:*:corrections' format '%B%d (errors %e)%b' 
# Don't complete stuff already on the line 
zstyle ':completion::*:(rm|vi):*' ignore-line true 
# Don't complete directory we are already in (../here) 
zstyle ':completion:*' ignore-parents parent pwd 
zstyle ':completion::approximate*:*' prefix-needed false 
+1

Я думаю, что вы частично понимаете мою вопрос. Похоже, вы предлагаете настроить мой скрипт завершения с помощью команд 'setopt' и' zstyle', но я понимаю, что вы думаете, что я приближаюсь к этому для моей личной конфигурации zsh. Я намерен предоставить лучший скрипт завершения для наших пользователей Gradle. Я не хочу настраивать это для какого-либо завершения, я специально хочу обратиться к этому для завершения градации. –