Exemple concret:
Je suis sur mac avec bash v3.2.17, j'utilise git installé via macports avec la variante bash_completion.
Quand je tape git checkout m<tab>
. par exemple, je le termine master
.
Cependant, j'ai un alias git checkout
, gco
. Lorsque je tape gco m<tab>
, je ne reçois pas le nom de la branche renseigné automatiquement.
Idéalement, j'aimerais que la saisie semi-automatique fonctionne comme par magie pour tous mes alias. C'est possible? A défaut, je souhaite le personnaliser manuellement pour chaque alias. Alors, comment dois-je procéder non plus?
Réponses:
Comme indiqué dans les commentaires ci-dessus,
ne fonctionnera plus. Cependant, il y a une
__git_complete
fonction dans git-complétement.bash qui peut être utilisée pour configurer la complétion pour des alias comme ceci:la source
__git_complete g __git_main
pour que la complétion de code fonctionne sur toutes les commandes git.git-completion.bash
de<your git install folder>/etc/bash-completion.d/
à l'~/.git-completion.bash
étape 2) ajoutezsource ~/.git-completion.bash
à votre.bash_profile
étape 3) Ajoutez__git_complete gco _git_checkout
n'importe où après la ligne ci-dessus dans votre .bash_profile. Étape 4) Redémarrez le shell et profitez de la saisie automatique de votre alias! :)J'ai également rencontré ce problème et j'ai trouvé cet extrait de code. Cela vous donnera automatiquement l'achèvement de tous les alias. Exécutez-le après avoir déclaré tout (ou n'importe quel) alias.
la source
let COMP_CWORD+=$num_alias_arguments
ne fonctionnait pas sur Mac OS X pour une raison quelconque. Le remplacer par le((COMP_CWORD+=$num_alias_arguments))
corriger cependantwrap_alias
étouffe les guillemets doubles dans la définition d'alias, et je suppose que cela n'a pas beaucoup de sens pour les alias multi-commandes (alias 'foo=bar; baz'
), donc je mets un supplément| grep -v '[";|&]'
après lealias -p
. En outre, cela devient un peu lent pour des centaines de définitions d'alias, mais je suis heureux de confirmer que l'utilisationecho
au lieu deeval
et la canalisation de la sortie dans un fichier cache (qui peut ensuite êtreeval
édité en une seule fois) fonctionne bien et est super rapide .wrap_alias
nécessite que les compléments soient configurés, j'ai donc dû me déplacersource /etc/bash_completion
devant lewrap_alias
code.let COMP_CWORD+=$num_alias_arguments
enlet \"COMP_CWORD+=$num_alias_arguments\"
.Il
git-completion.bash
y a une ligne:En regardant cette ligne (et la fonction _git), vous pouvez ajouter cette ligne à votre
.bash_profile
:la source
J'ai alias g = 'git', et combiné avec mes alias git, je tape des choses comme
La solution la plus simple pour mon cas d'utilisation spécifique était d'ajouter une seule ligne à git-complétement.
Juste en dessous de cette ligne:
J'ai ajouté cette ligne pour gérer mon seul alias «g»:
la source
git-completion
ou cette ligne/etc/bash_completion.d/git
, mais j'ai ajoutécomplete -o default -o nospace -F _git g
après mon alias.bash_aliases
et cela a fonctionné!/etc/bash-completion.d/
ou récemment/usr/share/bash-completion/
, vous perdrez vos modifications chaque fois que ce fichier sera mis à jour à l'aide de votre gestionnaire de packages.Oui, c'est possible avec le projet complete-alias (sous Linux). La prise en charge de Mac est expérimentale, mais les utilisateurs ont signalé un succès.
la source
Vous pouvez également essayer d'utiliser des alias Git. Par exemple, dans mon
~/.gitconfig
fichier, j'ai une section qui ressemble à ceci:Vous pouvez donc taper
git co m<TAB>
, et cela devrait s'étendre àgit co master
, qui est lagit checkout
commande.la source
Cette page de forum montre une solution.
Mettez ces lignes dans votre
.bashrc
ou.bash_profile
:Cette solution est similaire au script de Balshetzer , mais seule celle-ci fonctionne réellement pour moi. (Le script de balshetzer avait des problèmes avec certains de mes alias.)
la source
-bash: eval: line 28: unexpected EOF while looking for matching '''
-bash: eval: line 29: syntax error: unexpected end of file
"
guillemets à l'intérieur de lafunction
chaîne doivent être cités comme\"
. Cela mange probablement l'une de vos'
citations quelque part le long de la ligne.Une autre option consiste à utiliser le
~/.bash_completion
fichier. Pour créer l'gco
alias pourgit checkout
simplement mettre ceci ici:Ensuite,
~/.bashrc
vous devez simplement mettre l'alias lui-même:Deux lignes. C'est tout.
Explication:
Le
~/bash_completion
obtient à la fin du script bash_completion principal. Dans gentoo, j'ai trouvé le script principal dans/usr/share/bash-completion/bash_completion
.Le
_xfunc git
bit s'occupe de trouver legit-completion
fichier pour vous, vous n'avez donc pas besoin de mettre quoi que ce soit d'autre~/.bashrc
.La réponse acceptée vous oblige à la copier
.git-completion.sh
et à la source à partir de votre~/.bashrc
fichier que je trouve boiteux.PS: J'essaie toujours de comprendre comment ne pas source tout le
git-completion
script dans mon environnement bash. Veuillez commenter ou modifier si vous trouvez un moyen.la source
_xfunc git
requis?source ~/.git-completion.sh
je le laisse_xfunc
faire pour moi. C'est plus agréable et plus propre de le faire uniquement en~/.bash_completion
. Sans_xfunc
(ou le sourcing), la__git_complete
fonction n'existe pas.~/.bash_completion
fichier - la_xfunc
ligne fonctionne pour moi.bashrc
.Il suffit de trouver le
complete
commande et de dupliquer la ligne portant le nom d'alias à la place.Je l'ai
alias d-m="docker-machine"
. En d'autres termes,d-m
sera l'alias dedocker-machine
.Donc, sur Mac (via brew), les fichiers d'achèvement sont dans
cd `brew --prefix`/etc/bash_completion.d/
.Pour mon cas, j'ai édité le fichier appelé
docker-machine
.Tout en bas, il y avait:
Je viens donc d'ajouter une autre ligne, avec mon alias:
la source
docker
alias ded
. Bien que pour l'exemple de la question, legit checkout
repliement versgco
soit plus complexe.Tout d'abord, recherchez la commande d'achèvement d'origine. Exemple:
Ajoutez-les maintenant à votre script de démarrage (par exemple ~ / .bashrc):
La
_completion_loader
ligne peut ne pas être requise. Mais dans certaines situations, la fonction d'achèvement n'est chargée dynamiquement qu'après avoir tapé la commande et appuyéTAB
la première fois. Donc, si vous n'avez pas utilisé la commande d'origine et essayez l'alias +TAB
, vous pouvez obtenir une erreur comme "bash: complétion: fonction '_docker' introuvable".la source
Il y a beaucoup de réponses à cette question et comme moi je parie beaucoup de lecteurs confus. Pour mon cas, j'avais également eu besoin de faire fonctionner mes fichiers dot sur plusieurs plateformes avec différentes versions de Git. Je ne le fais pas non plus
alias g=git
maisg
défini comme une fonction.Pour ce faire, j'ai dû regrouper différentes réponses ici en une seule solution. Bien que cela répète déjà les réponses, je pensais que quelqu'un dans mon bateau pourrait trouver cette compilation utile comme je l'aurais fait lorsque je suis arrivé à cette question.
Cela suppose l'achèvement de Git plus ancien et plus récent, les valeurs par défaut d'Ubuntu et
brew install git
sur MacOS. Dans le dernier cas, les achèvements installés de l'infusion n'étaient pas traités par bash (quelque chose que je diagnostiquerai plus tard).la source
Si vous utilisez
alias g='git'
, j'ajoute cette ligne de code dans.bash_aliases
la source