Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Git completion not working in zsh on OS X Yosemite with Homebrew

Tags:

git

homebrew

zsh

I cannot get git completion to work on my freshly installed OS X Yosemite in the zsh shell. I've installed both git and zsh using homebrew:

brew install zsh git 

When installing git via homebrew, it should setup tab-completion for you, but when I git <tab>, it just tries to tab-complete the directories, and not the git-commands. I.e. it's not giving any errors - it's just not working - like it's not set up.

This is what I know so far

Apparently zsh will look for ways to autocomplete by looking for _* files in one of the directories in $fpath. This is mine:

% echo $fpath /usr/local/share/zsh/site-functions /usr/local/Cellar/zsh/5.0.6/share/zsh/functions 

Looking at the first path we see:

% ls -l /usr/local/share/zsh/site-functions lrwxr-xr-x  1 watson  admin   55 Oct 20 12:08 _git -> ../../../Cellar/git/2.1.2/share/zsh/site-functions/_git lrwxr-xr-x  1 watson  admin   70 Oct 20 12:08 git-completion.bash -> ../../../Cellar/git/2.1.2/share/zsh/site-functions/git-completion.bash 

So it seems to be setup to work out of the box - but it doesn't.

This is what I've also tried

git-completion.bash

  1. Downloading git-completion.bash
  2. Running it using source git-completion.bash

This one kind of works (i.e. it enables auto-completion), but it prints a warning:

WARNING: this script is deprecated, please see git-completion.zsh 

git-completion.zsh

So because of the above warning, I obviously also tried to download git-completion.zsh and followed the guide in the top of the file, but it basically tells you to source the .bash file first, which is of cause still giving an error.

Search StackOverflow and Google

I've tried just about everything I could find by searching here and on Google, but nothing seems to work for me.

like image 726
Thomas Watson Avatar asked Oct 20 '14 09:10

Thomas Watson


People also ask

Does bash completion work with zsh?

for ZSH usersZsh can handle bash completions functions. The latest development version of zsh has a function bashcompinit, that when run will allow zsh to read bash completion specifications and functions.

How do I add completion to zsh?

Simply type one of your alias in Zsh and try to use the keystroke. You need to set the zstyle completer to define the completer you want to use. The order matter: the completion system will try each of these completer one after the other.

What is git completion zsh?

Configuring the Shell fpath : The git-completion. zsh is a function file, not designed to be sourced like the bash script. This command appends the ~/. zsh directory onto the shell's function lookup list.


2 Answers

I just stumbled upon the answer!

In my case I was missing a few important pieces in my .zshrc file. But first a little background:

What I'm trying to do is setup the "zsh Completion System". It comes with a lot of commands all named something with comp*. I tried to run these a few times but in many cases zsh would just tell me it didn't know them. So aparently you have to autoload them, among other things.

This is what I did:

I added the following lines to my .zshrc file:

autoload -U compinit && compinit zmodload -i zsh/complist 

Then I opened a new terminal and ran:

rm -f ~/.zcompdump; compinit 

Then I opened a new terminal and now git <tab> worked as expected :)

If you are setting up a custom $fpath in your .zshrc file I would recommend adding these lines after you've modified the $fpath (though I don't know if it makes a difference).

like image 90
Thomas Watson Avatar answered Oct 01 '22 10:10

Thomas Watson


Since macOS Catalina,...
Apple has switched from bash to zsh as their default shell.

Now the only brew command you need to activate zsh-completion (which includes git completion) is this...

brew install zsh-completion 

Then add this block to your ~/.zshrc file (which you may have to create first):

if type brew &>/dev/null; then   FPATH=$(brew --prefix)/share/zsh-completions:$FPATH    autoload -Uz compinit   compinit fi 

See my answer on AskDifferent for more details:
https://apple.stackexchange.com/a/392382/77452

like image 32
Jpsy Avatar answered Oct 01 '22 11:10

Jpsy