在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/git
find)。
例
运行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