ZSH tab completion of git commands is very slow. How can I turn it off?

9,351

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.

Share:
9,351
Casey Rodarmor
Author by

Casey Rodarmor

I'm just this guy, you know?

Updated on September 18, 2022

Comments

  • Casey Rodarmor
    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
      Christopher over 11 years
      +1 This drives me so batty I've wired my brain to not hit <TAB> when using git.
  • djandDK
    djandDK over 10 years
    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.
  • cweekly
    cweekly about 10 years
    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! :)
  • Tom Bushell
    Tom Bushell almost 3 years
    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.
  • Pavel Komarov
    Pavel Komarov about 2 years
    This worked for me on Big Sur.