在 zsh 中改变 git checkout 行为

在 zsh 中改变 git checkout 行为

我正在关注此链接关于如何使用git 签出仅适用于本地分支的自动完成。

我第一次在我的 bash shell 上使用它如下(使用此链接作为参考。另外,注释掉了原代码):

_git_checkout ()
{
    __git_has_doubledash && return

    case "$cur" in
    --conflict=*)
        __gitcomp "diff3 merge" "" "${cur##--conflict=}"
        ;;
    --*)
        __gitcomp "
            --quiet --ours --theirs --track --no-guess --no-track --merge
            --conflict= --orphan --patch
            "
        # __gitcomp "
        #     --quiet --ours --theirs --track --no-track --merge
        #     --conflict= --orphan --patch
        #     "
        ;;
    *)
        # check if --track, --no-track, or --no-guess was specified
        # if so, disable DWIM mode
        local flags="--track --no-track --no-guess" track=1
        if [ -n "$(__git_find_on_cmdline "$flags")" ]; then
            track=''
        fi
            # __gitcomp_nl "$(__git_refs '' $track)"
            __gitcomp_nl "$(__git_heads '' $track)"
        ;;
    esac
}

这是有效的,现在我可以:

  1. 使用git checkout -- TAB并观察--no-guess
  2. git checkout TAB仅显示本地分支

但是,移动到 zsh 后,我无法实现这一点。我尝试将复制_git_checkout()到新文件 (~/.zsh_functions) 并以相同方式对其进行修改,然后添加source ~/.zsh_funcitons~/.zshrc获取它,但这没有帮助...

我提供的链接建议编辑/usr/local/share/zsh/site-functions/git-completion.bash,我没有……

我怎样才能让它在 zsh 中工作?(更具体地说,何时_git_checkout()调用以及从何处调用。我知道我需要以某种方式模仿 bash 查看命令的方式(例如git checkout <TAB>)并尝试自动完成它,但我这里缺少一些东西)

谢谢!

我之所以问这个问题是因为 zsh 确实很棒,因为它有一个很棒的菜单,我可以在它git checkout显示输出后使用 TAB 来查看,但是在 bash 中,我可以控制输出并只获取本地分支,所以我想要两全其美。如果 zsh 的 tab 菜单可以轻松导入到 bash,那我也会喜欢的 :)

相关内容