Итак, вы хотите, чтобы у вас было что-то типа 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
Посмотрите на функции завершения git, они работают так ('git clone - [TAB]' например ('--bare, --branch, ...')) –
@TomRegner это хорошо Идея. Я сделаю это. –
Выполнение Git (https://github.com/zsh-users/zsh/blob/master/Completion/Unix/Command/_git) использует функции завершения для каждой подкоманды (например, '_git_clone()'). В моем случае список задач Gradle является динамическим, и можно указать несколько задач, поэтому использование того же подхода не представляется возможным. Я добавлю это к вопросу. –