别名的Git完成就像Git本身一样
背景
我已经成功地为各种 Git 别名配置了 Bash 完成。例如:
$ git config alias.subject
!git --no-pager show --quiet --pretty='%s'
$ function _git_subject() { _git_show; }
$ git subject my<TAB>
$ git subject my-branch
挑战
但是,我有一个 Git 别名,我不知道如何为其设置 Bash 完成。问题是我希望别名能够像顶级 Git 命令本身一样完成。别名是这样的:
$ git config alias.alias
alias = !"f() { if [[ "$#" != 1 ]]; then >&2 echo "Usage: git alias COMMAND"; return 1; fi; git config alias."$1"; }; f"
# Example
$ git alias s
status
我试过使用_git, __git_main, 和__git_wrap__git_main,但它们都不起作用(我认为这会导致无限循环,因为它在我按下 Tab 后永远不会返回)。
有没有办法为 Git 别名添加完成,就像它是顶级 Git 命令一样?或者具体如何完成这个别名?
尝试过但不起作用
function _git_alias() { _git; }
function _git_alias() { __git_main; }
function _git_alias() { __git_wrap__git_main; }
期望的行为
$ git alias su<TAB>
subject submodule
$ git alias sub
或者,如果有一种简单的方法来完成别名也很酷。不过,我也想知道如何完成就好像顶级 Git 命令一样,只是出于好奇。