wya*_*iga 3 git bash alias autocomplete function
正常的自动完成功能git checkout
可能是显示分支列表,然后可以自动完成。如何为包装的函数添加相同的自动完成行为git checkout
?
假设地:
function git_checkout () {
git checkout $1
do_some_custom_other_stuff
}
Run Code Online (Sandbox Code Playgroud)
如何使它git_checkout
自动完成功能git checkout
呢?
如果运行complete -p git
,则可以看到默认完成git
本身是什么。
$ complete -p git
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git
Run Code Online (Sandbox Code Playgroud)
这里的重要部分是-F __git_wrap__git_main
位。
如果检查该__git_wrap__git_main
功能:
$ type __git_wrap__git_main
__git_wrap__git_main is a function
__git_wrap__git_main ()
{
__git_func_wrap __git_main
}
Run Code Online (Sandbox Code Playgroud)
您可以看到它只是__git_main
通过函数来调用__git_func_wrap
函数。(如果需要,您可以自己检查。)
查看该__git_main
函数,您会发现它尝试_git_XXX
根据正在运行的命令来查找函数,并且确实有一个_git_checkout
函数(type -t _git_checkout
== function
)。
该功能提供对的完成支持git checkout
。这就是您想要的自定义功能。这就是您需要完成使用的功能。
但是,您不能直接调用它,请记住,它需要从__git_func_wrap
启动所有操作的调用中进行一些设置,因此您需要自己包装它。
这正是__git_wrap__git_main
我们开始使用的功能__git_main
本身(for )的功能。
因此,我们自己编写了一个这样的函数:
__git_wrap_git_checkout() {
__git_func_wrap _git_checkout
}
Run Code Online (Sandbox Code Playgroud)
然后将其作为功能的完成功能:
complete -o bashdefault -o default -o nospace -F __git_wrap_git_checkout git_checkout
Run Code Online (Sandbox Code Playgroud)
而且我们应该很好走。
将该函数实现为git别名而不是独立的shell函数将意味着我们可以利用内置的gitcomplete支持并仅提供该_git_git_checkout
函数(与我们__git_wrap_git_checkout
上面的函数相同,并以_git_
+ 命名,alias_name
这是我们__git_main
期望的) )和git会自动进行调用。