ZSH tab completion of git commands is very slow. How can I turn it off?
Solution 1
I finally bothered to google this and came up with this SO answer, which worked perfectly for me. Add this to .zshrc
:
__git_files () {
_wanted files expl 'local files' _files
}
There's also a deep mailing list thread here about it explaining what zsh
is doing to take so long.
Solution 2
Here's another option: the official Git zsh completion: git-completion.zsh. All you need to do is download that to ~/.zsh/_git
, and make sure it's in your fpath:
fpath=(~/.zsh $fpath)
I find it interesting that this thread is mentioned in another response; I started that thread, and I wrote the official Git zsh completion as a result.
Comments
-
Casey Rodarmor over 1 year
If I type:
rm <TAB>
I'll see possible completions almost instantly.
However, if I type:
git rm <TAB>
It'll hang for several seconds if it's in a git repo, or fail to show any completions if I'm outside of a git repo.
How can I fix this behavior?
There's nothing in my .zshrc that looks like it has to do with git :-/
-
Christopher over 11 years+1 This drives me so batty I've wired my brain to not hit
<TAB>
when using git.
-
-
djandDK over 10 yearsThis did not work for me. I'm loading the following oh-my-zsh plugins: plugins=(git gitfast last-working-dir zeus). I loaded the above function after the plugins.
-
cweekly about 10 yearsI had the same problem. Commenting to confirm success: on OSX 10.8.5, zsh 4.3.11, git 1.8.2, that .zshrc entry made all the difference. Without it, cpu regularly pinned at 100%. With it, tab completion seems about the same for git commands as any other. Thank you! :)
-
Tom Bushell almost 3 yearsWhile this solves the performance issue, it also results in a completion behaviour that doesn't know anything about modified/untracked/ignored files and will happily complete any file. While this may be fine or even preferrable for some users, I prefer the solution outlined in the other answer more convenient.
-
Pavel Komarov about 2 yearsThis worked for me on Big Sur.