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