25

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 :-/

1
  • +1 This drives me so batty I've wired my brain to not hit <TAB> when using git. Aug 8 '12 at 12:12
31

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.

4
  • 1
    This 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. Nov 21 '13 at 21:41
  • 1
    I 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! :)
    – cweekly
    Apr 4 '14 at 20:34
  • Make sure you put this command before your zsh plugins, otherwise you might end up with quick autocompletion, but errors once you try to actually run the git command.
    – Simon
    Apr 22 '15 at 7:22
  • While 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.
    – Thomas G.
    Jun 18 at 13:22
7

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.

0

I was able to fix this issue by using a combination of @FelipeC's answer and this answer from a similar Stack Overflow question.

When I only did what @FelipeC suggested, I then got the error mentioned in the referenced Stack Overflow question. Following the instructions in the Stack Overflow answer fixed the error and made git auto completion far more responsive.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.