How to get ZSH to complete CMD1 like CMD2
aaaand, nothing. Just completion of files in the current directory. Where’d my ZSH git completion go?! Why didn’t it work across aliases?
My initial reaction was just to remove the git-achievements alias and use straight git. Then I decided to enter the Lair of the ZSH Completion Docs* and see if I could fix it. My first attempt was to edit my zshrc to add all the git completion functions to git-achievements:
compdef git-achievements git-add git-am <...etc...> git-write-tree
Note that these were copied from
/usr/share/zsh/4.3.9/functions/_git. That didn’t work. So I dove back in and found it:
compdef [ -an ] function names… [ -[pP] patterns… [ -N names… ] ]
…all the arguments may have the form `cmd=service‘. Here service should already have been defined by `cmd1=service‘ lines in #compdef files, as described above. The argument for cmd will be completed in the same way as service. [bolding mine]
Even that is hard to puzzle out, but it means that you can do this:
alias git="git-achievements" compdef git-achievements=git
..and everything is fine and dandy.
*Note: I know that the ZSH documentation writers must be trying, and it’s mostly clear(ish), or at least comprehensive. But there’s so many options that it’s basically a hopeless task. I mean, I found this tip out on something like my 10th read of that page.