Zsh wants to autocorrect a command, with an _ before it

Solution 1:

This is command autocorrection, activated by the correct option. It has nothing to do with completion. You're seeing _ruby because zsh thinks there is no ruby command and it offers _ruby as the nearest existing match.

If you've just installed ruby, it's possible that zsh has memorized the list of available command earlier, and it won't always try to see if the command has appeared in between. In that case, run hash -rf. Future zsh sessions won't have this problem since the ruby command already existed when they started.

Sometimes, when you change your PATH, zsh forgets some hashed commands. The option hash_listall helps against this. As above, if you can force zsh to refresh its command cache with hash -rf.

Solution 2:

You could make an alias:

alias ruby='nocorrect ruby'

It's what I did when zsh kept asking me if I meant .meteor when I typed meteor because auto-correct is still useful from time to time.

Solution 3:

I find the autocorrect feature can get annoying at times. So I do in my ~/.zshrc,

DISABLE_CORRECTION="true"