205 votes

Comment faire bash-completion to fonctionne avec des alias ?

Affaire au point:

Je suis sur mac avec bash v3.2.17, je suis en utilisant git installé via macports avec le bash_completion variante.

Quand je tape git checkout m<tab>. par exemple, je l'ai terminé à l' master.

Cependant, j'ai un alias pour l' git checkout, gco. Quand je tape gco m<tab>, je n'ai pas le nom de la branche complété automatiquement.

Idéalement, j'aimerais d'auto-complétion de tout comme par magie de travail pour tous mes alias. Est-il possible? À défaut, j'aimerais personnaliser manuellement pour chaque alias. Alors, comment dois-je faire?

190voto

chris_sutter Points 843

Comme indiqué dans les commentaires ci-dessus,

ne fonctionne plus. Cependant, il y a une `` fonction dans git-completion.bash, qui peut être utilisé pour mettre en place la saisie semi-automatique pour alias comme suit :

55voto

Hesky Fisher Points 473

J’ai rencontré ce problème aussi bien et est venu avec cet extrait de code. Cela vous donnera automatiquement achèvement pour tous les alias. L’exécuter après avoir déclaré la totalité (ou une) alias.

18voto

Chris Lloyd Points 5346

En `` il y a une ligne :

En regardant cette ligne (et la fonction _git) vous pouvez ajouter cette ligne à votre `` :

15voto

wonderfulthunk Points 182

J’ai un alias g = « git » et combiné avec mon alias git je tape des choses comme

La solution plus simple pour mon cas d’utilisation spécifique était d’ajouter une seule ligne à git-completion.

Juste en dessous de cette ligne :

J’ai ajouté cette ligne pour gérer mon alias unique « g » :

5voto

hcs42 Points 5407

Cette page du forum montre une solution.

Mettre ces lignes dans votre .bashrc ou .bash_profile:

# Author.: Ole J
# Date...: 23.03.2008
# License: Whatever

# Wraps a completion function
# make-completion-wrapper <actual completion function> <name of new func.>
#                         <command name> <list supplied arguments>
# eg.
#   alias agi='apt-get install'
#   make-completion-wrapper _apt_get _apt_get_install apt-get install
# defines a function called _apt_get_install (that's $2) that will complete
# the 'agi' alias. (complete -F _apt_get_install agi)
#
function make-completion-wrapper () {
    local function_name="$2"
    local arg_count=$(($#-3))
    local comp_function_name="$1"
    shift 2
    local function="
function $function_name {
    ((COMP_CWORD+=$arg_count))
    COMP_WORDS=( "$@" \${COMP_WORDS[@]:1} )
    "$comp_function_name"
    return 0
}"
    eval "$function"
}

# and now the commands that are specific to this SO question

alias gco='git checkout'

# we create a _git_checkout_mine function that will do the completion for "gco"
# using the completion function "_git"
make-completion-wrapper _git _git_checkout_mine git checkout

# we tell bash to actually use _git_checkout_mine to complete "gco"
complete -o bashdefault -o default -o nospace -F _git_checkout_mine gco

Cette solution est similaire à balshetzer du script, mais seulement celui-ci fonctionne réellement pour moi. (balshetzer du script eu des problèmes avec certains de mes alias.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X