我正在关注此链接关于如何使用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
}
这是有效的,现在我可以:
- 使用
git checkout -- TAB
并观察--no-guess
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,那我也会喜欢的 :)