I am trying to modify the behaviour of zsh completion and its menus. I'm stuck, and I've read so much documentation it's making my head spin.
The following is only an example; I'd prefer answers that aren't specific to cd.
I have zsh set up to only show the select menu if the completion is unambiguous (zstyle ':completion:*:*:*:*:*' menu select=2).
I have an alias alias cd='nocorrect cd'. When I do cd<TAB> (no space), zsh thinks it is unambiguous, and completes the alias. zsh thinks it is unambiguous--indeed, when I do cd<^D>, it only shows the one possible completion. In my mind, it should show other completion options like cdiff. Indeed, when I do cd<^Xn>, I see those other options. This is also the demonstrated behaviour in the ZSH User's Guide, section 6.5.2.
I sort of see what's going on. I have my completers set up as zstyle ':completion:*' completer _expand _expand_alias _complete _ignored _match _correct _approximate _prefix, so I can understand why it thinks expanding that alias is the first priority. I just can't figure out why it's the only option.
I would think it's something to do with tag-order, like in the second example in the user guide section 6.4.2. However, I don't have anything like that set up for this context (:completion::complete:-command-::), or anything else it might inherit from.
All of my completion-related settings are in this file on Github. Going up from there, you can see my zsh configuration in its entirety; however, I don't have anything set up for :completion: outside of this file, including in my .zshrc, so I doubt anything's overriding it.
So, can someone please explain to me what to do to get the behaviour I want?
FYI, I am using zsh with the Prezto framework, which I believe is irrelevant since the problem is entirely related to built-in zsh features and modules.
Some output:
cd<TAB>: just changes cd to nocorrect cd, no menu.
$ cd<^D> -- alias -- nocorrect cd $ cd<^Xn> -- external command -- cdbs-edit-patch cd-fix-profile cdiff cd-create-profile cd-iccdump -- builtin command -- cd -- shell function -- cdls -- alias -- cd -- parameter -- CDPATH cdpath