基于参数的Hook bash自动完成

时间:2018-04-27 07:27:06

标签: bash git autocomplete

我有git

的以下别名
[alias]
    review = !git stash && git fetch origin $1 && (git branch -m $1 tmp-review-$1-$(date +%Y-%m-%d-%H-%M-%S) || :) && git checkout -b $1 origin/$1 && :

您可以像git review <branch-name>

一样使用它

如何将已存在的分支自动填充功能挂钩到git review

我正在寻找类似的东西:

__git_complete gr _git_branch

但要根据参数完成 - &gt; git review <tab>

一般来说,有没有办法根据正则表达式或字符串匹配来挂钩bash自动完成?

解决方案

对于git,请参阅@ Timir的回复。

# add completion handler for 'review' command
_git_review ()
{
    __git_complete_refs
}

一般情况下,您可以挂钩自己的自动完成功能,并调用默认值:

_tralala ()
{
    cur=${COMP_WORDS[COMP_CWORD]}
    prev=${COMP_WORDS[COMP_CWORD-1]}

    if [ "$prev" = "test" ]; then
        COMPREPLY=( $( compgen -W 'ninja pizza' -- "$cur" ) )
    else
        _git
    fi
}

complete -F _tralala git

1 个答案:

答案 0 :(得分:2)

只需在git-completion.bash.bash_profile中定义以下功能。

# add completion handler for 'review' command
_git_review ()
{
    __git_complete_refs
}

那将给你git review <tab>自动完成功能。如果您还在寻找git <tab>自动填充功能以包含您的别名,那么您还需要git-completion.bash中的以下内容:

# add hook for further expansions
_git_known_expansions () 
{
    # list aliases
    echo $(git config --name-only --get-regexp alias | sed 's/alias\.//g')
}

# modify command list to include expansions
__git_commands () {
    if test -n "${GIT_TESTING_COMMAND_COMPLETION:-}"
    then
        printf "%s" "${GIT_TESTING_COMMAND_COMPLETION}"
    else
        echo "$(git help -a|egrep '^  [a-zA-Z0-9]') $(_git_known_expansions)"
    fi
}

希望这有帮助。