site/content/completions/zsh.md
Please refer to Shell Completions for details.
Cobra 1.1 standardized its zsh completion support to align it with its other shell completions. Although the API was kept backwards-compatible, some small changes in behavior were introduced.
See further below for more details on these deprecations.
cmd.MarkZshCompPositionalArgumentFile(pos, []string{}) is no longer needed. It is therefore deprecated and silently ignored.cmd.MarkZshCompPositionalArgumentFile(pos, glob[]) is deprecated and silently ignored.
ValidArgsFunction with ShellCompDirectiveFilterFileExt.cmd.MarkZshCompPositionalArgumentWords() is deprecated and silently ignored.
ValidArgsFunction.Noun completion
| Old behavior | New behavior |
|---|---|
| No file completion by default (opposite of bash) | File completion by default; use ValidArgsFunction with ShellCompDirectiveNoFileComp to turn off file completion on a per-argument basis |
Completion of flag names without the - prefix having been typed | Flag names are only completed if the user has typed the first - |
cmd.MarkZshCompPositionalArgumentFile(pos, []string{}) used to turn on file completion on a per-argument position basis | File completion for all arguments by default; cmd.MarkZshCompPositionalArgumentFile() is deprecated and silently ignored |
cmd.MarkZshCompPositionalArgumentFile(pos, glob[]) used to turn on file completion with glob filtering on a per-argument position basis (zsh-specific) | cmd.MarkZshCompPositionalArgumentFile() is deprecated and silently ignored; use ValidArgsFunction with ShellCompDirectiveFilterFileExt for file extension filtering (not full glob filtering) |
cmd.MarkZshCompPositionalArgumentWords(pos, words[]) used to provide completion choices on a per-argument position basis (zsh-specific) | cmd.MarkZshCompPositionalArgumentWords() is deprecated and silently ignored; use ValidArgsFunction to achieve the same behavior |
Flag-value completion
| Old behavior | New behavior |
|---|---|
| No file completion by default (opposite of bash) | File completion by default; use RegisterFlagCompletionFunc() with ShellCompDirectiveNoFileComp to turn off file completion |
cmd.MarkFlagFilename(flag, []string{}) and similar used to turn on file completion | File completion by default; cmd.MarkFlagFilename(flag, []string{}) no longer needed in this context and silently ignored |
cmd.MarkFlagFilename(flag, glob[]) used to turn on file completion with glob filtering (syntax of []string{"*.yaml", "*.yml"} incompatible with bash) | Will continue to work, however, support for bash syntax is added and should be used instead so as to work for all shells ([]string{"yaml", "yml"}) |
cmd.MarkFlagDirname(flag) only completes directories (zsh-specific) | Has been added for all shells |
Completion of a flag name does not repeat, unless flag is of type *Array or *Slice (not supported by bash) | Retained for zsh and added to fish |
Completion of a flag name does not provide the = form (unlike bash) | Retained for zsh and added to fish |
Improvements
ValidArgsFunction and RegisterFlagCompletionFunc())= form of flags