如何为自定义gco函数复用git checkout的Bash补全脚本?
自定义Bash函数gco的Git补全问题解决
我写了个简化git checkout操作的Bash函数gco,想让它自动补全的时候直接用git checkout的补全逻辑。自己写的补全函数有问题,按Tab出来的是git checkout的命令输出,不是正确的分支补全项。想问能不能直接调用原命令的补全脚本,不用执行原命令。
我的自定义函数代码
gco() { if [ -z "$1" ]; then branch="$(git branch --all | fzf | tr -d '[:space:]')" else branch="$1" fi git checkout "$branch" }
尝试的补全代码
function _gco() { local curr_arg; curr_arg=${COMP_WORDS[COMP_CWORD]} COMPREPLY=( $(compgen -W "$(git checkout)" -- $curr_arg ) ); } complete -F _gco gco
错误补全输出
$ gco
1 different into respectively. yours)
38 diverged, merge the
and each, origin/mybranch to
branch git pull (use
commits have remote Your
解决方法
直接复用Git自带的checkout补全函数就行,不用自己写逻辑。Git的Bash补全脚本已经定义了_git_checkout函数,专门处理git checkout的补全,只需要把gco的补全绑定到这个函数:
complete -F _git_checkout gco
之前的错误是因为你在补全函数里执行了git checkout(不带参数时会输出分支状态信息),把这个输出当成了补全候选,所以得到一堆无关内容。复用现成的补全函数,就能得到和git checkout完全一致的补全效果,包括分支、标签等所有合法选项。
内容的提问来源于stack exchange,提问作者wheeler
相关产品推荐
相关产品推荐

