在bash别名Git自动完成?

我使用go作为git checkout branchname的简单bash别名。 我错过的是与完整的git checkout branchna...命令一起工作的自动完成function,但不在别名中。

有没有办法指示Bash“inheritance”自动完成“驱动程序”的另一个命令?

如果您能find原始命令使用的完成function,则可以使用complete -F将其分配给别名。

例如,在我的Ubuntu机器上, git checkout使用的完成函数是_git_checkout (在/etc/bash_complete.d/gitfind)。

运行complete -F之前complete -F

 [me@home]$ git checkout <TAB><TAB> HEAD master origin/HEAD origin/master [me@home]$ alias go="git checkout" [me@home]$$ go <TAB><TAB> .git/ precommit_config.py README.md SvnSentinel/ .gitignore precommit.py startcommit.py tests/ 

后:

 [me@home]$$ complete -F _git_checkout go [me@home]$$ go <TAB><TAB> HEAD master origin/HEAD origin/master 

使用complete -F

 complete -F _git_checkout go 

之后停顿可能会导致:

 bash: [: 1: unary operator expected 

而不是complete ,使用__git_complete

这是git bash完成的内置函数。

声明你的别名后,绑定正确的自动完成function:

 alias g="git" __git_complete g _git alias go="git checkout" __git_complete go _git_checkout alias gp="git push" __git_complete gp _git_push 

在Linux Mint上,这不适合我。 我得到bash: [: 1: unary operator expected

我发现以下响应工作得很好 – 用户提供的疑难解答部分非常有帮助。 https://superuser.com/questions/436314/how-can-i-get-bash-to-perform-tab-completion-for-my-aliases