I use ZSH with Oh My Zsh and I am trying to define a function called git, as such:

function git() { echo "I'm happy because I am executed!" }

I have placed the function definition in $ZSH/custom/general.zsh.

Everything else in this file works (I have a bunch of aliases there) except this function.

Running which git outputs:

git () {
    case $1 in
        (commit|blame|add|log|rebase|merge) exec_scmb_expand_args "$_git_cmd" "$@" ;;
        (checkout|diff|rm|reset) exec_scmb_expand_args --relative "$_git_cmd" "$@" ;;
        (branch) _scmb_git_branch_shortcuts "${@:2}" ;;
        (*) "$_git_cmd" "$@" ;;

Removing git from plugins=( ... ) didn't work. Trying to find this function in Oh My Zsh yielded no results.

I read the source code of oh-my-zsh.sh, and it seems the custom directory is loaded after all of OMZ's files, so it didn't make any sense to me, that when I placed my function at the bottom of .zshrc it worked.

Any Ideas on how to keep the function in the custom folder? I would like to keep things organized.

  • Have you started a new login shell after you update the code? – number5 Oct 29 '13 at 2:02
  • Of course, I run ~ $ source .zshrc && git after each change. – Cat Boss Oct 29 '13 at 12:43

You probably installed scm_breeze, and my theory is that in your .zshrc the sourcing of scm_breeze.sh is preceeded by oh-my-zsh.sh. And if you put your git function definition at the very end of .zshrc, then you probably exceed the scm_breeze.sh, so that's the reason why it works.

  1. Try to move the line that sources oh-my-zsh.sh to the very end of your .zshrc or at least in a position where it exceeds the sourcing of scm_breeze.sh. Restart zsh and see if it works. (alternatively you can remove scm_breeze.sh completely)

  2. If it still doesn't work, then back up your .zshrc and all your oh-my-zsh stuffs, then create an empty .zshrc, delete and reinstall oh-my-zsh with curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh and then put function git() { echo "I'm happy because I am executed!" } in $ZSH/custom/general.zs, I have tested this, it worked for me. After that you can gradually reapply your former settings, step-by-step checking what exactly breaks your configuration.

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.