zsh_completions.md

 1## Generating Zsh Completion for your cobra.Command
 2
 3Cobra supports native Zsh completion generated from the root `cobra.Command`.
 4The generated completion script should be put somewhere in your `$fpath` named
 5`_<YOUR COMMAND>`.
 6
 7### What's Supported
 8
 9* Completion for all non-hidden subcommands using their `.Short` description.
10* Completion for all non-hidden flags using the following rules:
11  * Filename completion works by marking the flag with `cmd.MarkFlagFilename...`
12    family of commands.
13  * The requirement for argument to the flag is decided by the `.NoOptDefVal`
14    flag value - if it's empty then completion will expect an argument.
15  * Flags of one of the various `*Array` and `*Slice` types supports multiple
16    specifications (with or without argument depending on the specific type).
17* Completion of positional arguments using the following rules:
18  * Argument position for all options below starts at `1`. If argument position
19    `0` is requested it will raise an error.
20  * Use `command.MarkZshCompPositionalArgumentFile` to complete filenames. Glob
21    patterns (e.g. `"*.log"`) are optional - if not specified it will offer to
22    complete all file types.
23  * Use `command.MarkZshCompPositionalArgumentWords` to offer specific words for
24    completion. At least one word is required.
25  * It's possible to specify completion for some arguments and leave some
26    unspecified (e.g. offer words for second argument but nothing for first
27    argument). This will cause no completion for first argument but words
28    completion for second argument.
29  * If no argument completion was specified for 1st argument (but optionally was
30    specified for 2nd) and the command has `ValidArgs` it will be used as
31    completion options for 1st argument.
32  * Argument completions only offered for commands with no subcommands.
33
34### What's not yet Supported
35
36* Custom completion scripts are not supported yet (We should probably create zsh
37  specific one, doesn't make sense to re-use the bash one as the functions will
38  be different).
39* Whatever other feature you're looking for and doesn't exist :)