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会自动进行调用。
| 归档时间: |
|
| 查看次数: |
280 次 |
| 最近记录: |