ZSH auto completion for git takes significant amount of time, can I turn it off or optimize it?

haroba picture haroba · Mar 21, 2012 · Viewed 11.5k times · Source

Git's tab autocompletion is useful for small projects, but I'm currently working on two big projects that use git and for these it's worse than useless. Whenever I type, say, git add forms<tab>, git takes 20 seconds or more to find the file (in this example, forms.py), and in this timespan I can't do anything else in the terminal. Is there any way to turn off the autocompletion feature, or somehow make it faster?

Answer

ralphtheninja picture ralphtheninja · Mar 21, 2012

It's not git auto completing the file names, it's your shell. Do you have the same delay when doing e.g. "cat forms< tab >"?

Check out this post with similar problems:

http://talkings.org/post/5236392664/zsh-and-slow-git-completion

This post suggests adding the following to your .zshrc:

__git_files () { 
    _wanted files expl 'local files' _files     
}

EDIT: Here's the original text of that post

I found many posts relating complaints about how painfully slow git auto-completion can be in large repositories. There were various suggested patches and suggestions to load the latest zsh. Maybe one of those things would work, but all I really want is for it to complete the names of branches and files as they are in the file system. I did not find any suggestions on how to get this behavior so I figured it out for myself. I thought I would share this for anyone who might benefit from it. I just added the following to my .zshrc file:

__git_files () { 
    _wanted files expl 'local files' _files  }

Now I can run git commands and get near instant completion while still getting file completion similar to what ls would provide.