#!/bin/zsh zmodload -Fa zsh/zutil b:zstyle typeset -g ZLE_REMOVE_SUFFIX_CHARS=$' /;\n\r\t' typeset -g ZLE_SPACE_SUFFIX_CHARS='|&<>-+' builtin zstyle ':completion:*' use-cache yes builtin zstyle -e ':completion:*' cache-path autocomplete:config:cache-path autocomplete:config:cache-path() { typeset -ga reply=( "${XDG_CACHE_HOME:-$HOME/.cache}/zsh/compcache" ) } builtin zstyle ':completion:*' completer \ _expand _complete _complete:-fuzzy _correct _approximate _ignored builtin zstyle -e ':completion:*' max-errors autocomplete:config:max-errors autocomplete:config:max-errors() { typeset -ga reply=( $(( min( 2, ( $#PREFIX + $#SUFFIX ) / 3 ) )) ) } # Order of matchers matters: m should come before r, which should come before l. # Otherwise, the results are not as expected. local lower_to_upper='m:{[:lower:]-}={[:upper:]_}' local any_before_dot='r:|[.]=**' local any_before_any='r:|?=**' local nonseparators_after_any_before_separator='r:?||[-_ \]=*' local any_before_word='l:|=*' local separator_after_any='l:?|=[-_ \]' builtin zstyle ':completion:*' matcher-list \ "$lower_to_upper $any_before_dot" builtin zstyle ':completion:*-fuzzy:*' matcher-list \ "$lower_to_upper $any_before_dot $any_before_word" \ "+$nonseparators_after_any_before_separator $separator_after_any" \ "$lower_to_upper $any_before_any" local minus_at_beginning_to_plus='b:-=+' builtin zstyle ':completion:*:options' matcher $minus_at_beginning_to_plus builtin zstyle ':completion:*' prefix-needed yes builtin zstyle ':completion:*:functions' ignored-patterns '*.*' '*:*' '+*' builtin zstyle ':completion:*:users' ignored-patterns '_*' builtin zstyle ':completion:*:widgets' ignored-patterns '*.*' '*:*' builtin zstyle ':completion:*' single-ignored '' builtin zstyle ':completion:*:expand-alias:*' complete yes builtin zstyle ':completion:*:expand:*' tag-order 'expansions all-expansions' - builtin zstyle ':completion:*:expand:*' accept-exact continue builtin zstyle ':completion:*:expand:*' add-space no builtin zstyle ':completion:*:expand:*' glob yes builtin zstyle ':completion:*:expand:*' keep-prefix no # Needed for file type highlighting builtin zstyle ':completion:*:expand:*' substitute yes builtin zstyle ':completion:*:expand:*' subst-globs-only yes builtin zstyle -e ':completion:*:-command-:*' tag-order autocomplete:config:tag-order:command autocomplete:config:tag-order:command() { if [[ $PREFIX == (|.|*/*) ]]; then typeset -ga reply=( 'suffix-aliases (|*-)directories executables (|*-)files' - ) else typeset -ga reply=( 'aliases suffix-aliases functions reserved-words builtins' ) if (( path[(I).] )); then reply[1]+=' (|*-)directories executables (|*-)files commands' else reply[1]+=' commands (|*-)directories executables (|*-)files' fi fi } builtin zstyle ':completion:*:-tilde-:*' tag-order directory-stack named-directories builtin zstyle ':completion:*:(approximate|correct):*' tag-order '! original' - # Complete options rather than directory stack. You can get directory stack by typing `~-` (tilde plus dash). builtin zstyle ':completion:*:cd:*' complete-options yes builtin zstyle ':completion:*:cd:*' tag-order '! directory-stack' - # Don't show the giant list of history lines. builtin zstyle ':completion:*:fc:*' tag-order options - builtin zstyle -e ':completion:*:git-*:*' tag-order 'autocomplete:config:tag-order:git "$@"' autocomplete:config:tag-order:git() { reply=() (( compstate[nmatches] )) && reply=( '! heads(|-*) *-remote remote-* blob-*' - ) } # Complete only the tail of a path. builtin zstyle ':completion:*' ignore-parents 'parent pwd directory' builtin zstyle ':completion:*:paths' expand suffix builtin zstyle ':completion:*:paths' list-suffixes yes builtin zstyle ':completion:*:paths' special-dirs no builtin zstyle ':completion:*' group-name '' builtin zstyle ':completion:*:-command-:*' group-name commands builtin zstyle ':completion:*:all-expansions' group-name 'expansion' builtin zstyle ':completion:*' group-order \ expansions all-expansions options \ aliases suffix-aliases functions reserved-words builtins commands \ remotes hosts recent-branches commits \ local-directories directories executables builtin zstyle ':completion:*' file-patterns '*(-/):directories:directory %p(#q^-/):globbed-files' builtin zstyle -e ':completion:*:-command-:*' file-patterns autocomplete:config:file-patterns:command autocomplete:config:file-patterns:command() { [[ $PREFIX$SUFFIX != */* ]] && typeset -ga reply=( '*(-/):directories:directory ./*(-*^/):executables:"executable file"' ) } builtin zstyle ':completion:*:(.|source):*' file-patterns \ '%p(#q-/):directories:directory %p~*.zwc(-.^*):globbed-files' '%p~*.zwc(-^/):globbed-files' # Don't combine parameters with same values. builtin zstyle ':completion:*:parameters' list-grouped no builtin zstyle -e ':completion:*:-command-:*' format autocomplete:config:format command builtin zstyle -e ':completion:*:descriptions' format autocomplete:config:format %d builtin zstyle -e ':completion:*:all-expansions' format autocomplete:config:format expansion autocomplete:config:format() { reply=( $'%{\e[0;1;2m%}'$1$'%{\e[0m%}' ) } builtin zstyle -e ':completion:*:all-expansions' format autocomplete:config:format expansion builtin zstyle -e ':completion:*:expansions' format autocomplete:config:format '"globbed files"' builtin zstyle -e ':completion:*:warnings' format autocomplete:config:format:warnings autocomplete:config:format:warnings() { [[ $CURRENT == 1 && -z $PREFIX$SUFFIX ]] || autocomplete:config:format 'no matching %d completions' } builtin zstyle ':completion:*:messages' format '%F{9}%d%f' builtin zstyle ':completion:*:history-lines' format '' builtin zstyle ':completion:*' auto-description '%d' builtin zstyle ':completion:*:parameters' extra-verbose yes builtin zstyle ':completion:*:default' select-prompt '%F{black}%K{12}line %l %p%f%k' builtin zstyle ':completion:*' insert-sections yes builtin zstyle ':completion:*' separate-sections yes # Needed for _gnu_generic to prevent descriptions from getting cropped. is-at-least 5.9 || builtin zstyle ':completion:*' command '- COLUMNS=999' ${0}:precmd() { typeset -g _comp_setup="$_comp_setup"'; [[ $_comp_caller_options[globdots] == yes ]] && setopt globdots' # Remove incompatible settings. local -P key= setting= for key in menu list-prompt; do for setting in ${(f)"$( zstyle -L '*' $key )"}; do eval "${setting/zstyle(| -e)/zstyle -d}" done done builtin zstyle ':completion:*:*:*:*:default' menu no no-select unset LISTPROMPT }