Comment alias 'git' à 'g' pour que les règles de bash-complétement soient préservées?

25

Si je fais ça:

alias g='git'

Je perds toutes les règles d'achèvement (c'est-à-dire que les branches et les télécommandes ne sont plus terminées automatiquement lorsque je tape sur TAB après avoir tapé, par exemple g push o).

Paweł Gościcki
la source
Bien que je n'aie pas de réponse pour vous, je vais devoir prendre une minute et me demander si ne pas taper ces deux autres lettres vous donne vraiment beaucoup d'avantages?
Marco Ceppi
4
Bien sûr! Je tape «g» probablement plus de 100 fois par jour.
Paweł Gościcki
3
Aliaser des commandes courtes souvent utilisées pour des alias encore plus courts me fait économiser des centaines de touches par jour. Selon mon historique de shell, j'ai utilisé l'alias g=git756 fois au cours du mois dernier, ce qui signifie que j'ai économisé en appuyant sur les touches «g» et «i» 1512 fois au total. Cela, combiné à mes alias git, me fait probablement économiser des dizaines de milliers de touches par mois.
Le principal point de raccourcissement des frappes est d'aider vos mains à suivre votre cerveau.
Tyler Collier
Le script sur superuser.com/questions/436314/… a si bien fonctionné que je pense qu'il mérite une mention.
brandizzi

Réponses:

21

Copiez et modifiez opportunément à partir de /etc/bash_completion.d/git, ajoutez les lignes suivantes à votre ~/.bashrc:

complete -o bashdefault -o default -o nospace -F _git g 2>/dev/null \
    || complete -o default -o nospace -F _git g
enzotib
la source
Ha! Wunderbar! Fonctionne comme il se doit :)
Paweł Gościcki
1
J'ai aussi dû ajouter source /usr/share/bash-completion/completions/gità mon .bashrc
pcx
Je ne sais pas si le .bashrccode fonctionne ici, mais cette réponse est définitivement obsolète. /etc/bash_completion.d/gitne semble pas exister le 14.04. Voir la réponse de lzap ci-dessous.
Max Wallace
18

Le dernier achèvement en bash en amont a déplacé et renommé un peu les choses. La neige:

source /usr/share/bash-completion/completions/git
__git_complete g __git_main

Utilisez-le dans les versions récentes d'Ubuntu (par exemple 14.04, également Fedora 22+) lorsque vous rencontrez:

completion: function `_git' not found

pendant l'achèvement.

lzap
la source
2
On dirait que c'est la seule bonne réponse ici.
pjvandehaar
Utilisez __git_complete gc _git_checkout(ou similaire) pour configurer des complétions pour des alias plus spécifiques. Recherchez /usr/.../gitcomme ci-dessus pour trouver le bon nom.
Max Wallace du
1
@MaxWallace - lorsque vous définissez les alias pour des méthodes git particulières dans .gitconfig (par exemple gc = checkout), il n'est pas nécessaire de configurer explicitement l'achèvement pour eux.
Piotr Aleksander Chmielowski
1
@PiotrAleksanderChmielowski Merci! Mais je ne pense pas que cela fonctionne pour les alias bash de niveau supérieur (par exemple gc=> git checkout) par opposition à l'aliasing cà l' checkoutintérieur gitet à dire git c. Corrige moi si je me trompe.
Max Wallace
@MaxWallace Oui, vous avez raison, mon erreur;)
Piotr Aleksander Chmielowski
2

Tout d'abord, recherchez la commande d'achèvement d'origine. Exemple:

$ complete | grep git

complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git

Ajoutez-les maintenant à votre script de démarrage (par exemple ~ / .bashrc):

# copy the original statement, but replace the last command (git) with your alias (g)
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main g

# load dynamically loaded completion functions (may not be required)
_completion_loader git

La _completion_loaderligne 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é TABla 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 introuvable".

wisbucky
la source
Fonctionne très bien. Pour moi, c'est la bonne réponse, la commande grep sur complete est pratique. N'a pas eu besoin du chargeur d'achèvement.
Paul Carlton
1

La façon mise à jour de le faire (complète ne fonctionnerait pas pour moi):

  1. cd - basculez vers votre répertoire personnel
  2. wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
  3. Ajoutez source ~/git-completion.bashà votre fichier .bashrc (si vous n'avez pas ce fichier, créez-en un dans votre dossier personnel, bash le recherchera automatiquement)
  4. Ajoutez alias g='git'à votre fichier .bashrc.
  5. Démarrez une nouvelle session ou sourcez vos modifications avec source ~/.bashrc
Elijah Lynn
la source
2
Vous avez sauté la partie où ils ont effectivement ajouté l'achèvement dans le commentaire que vous avez lié à:__git_complete g _git
pjvandehaar
0

Par souci d'exhaustivité, je voudrais ajouter une réponse en utilisant le ~/.bash-completionfichier, qui est obtenu à la fin du script de fin de bash:

_xfunc git __git_complete g __git_main
_xfunc git __git_complete gl _git_log
_xfunc git __git_complete gd _git_diff
_xfunc git __git_complete gb _git_branch

Ensuite, dans mon ~/.bashrcj'ai juste les alias. J'étais en train d'essayer de:

  • éviter de polluer mon ~/.bashrcavec des trucs de complétion bash (garder les trucs à leur place) ✓
  • éviter de sourcer tout le git-complétion dans mon shell ☹

Malencontreusement les _xfuncsources du git-complétement de toute façon. Je mettrai à jour cette réponse une fois que j'aurai compris comment le faire correctement (j'ai également demandé sur le lunchpad ici ).

kub1x
la source
-1

Regardez ici: https://gist.github.com/scue/576310b7c6b7714aad05

wget https://gist.github.com/scue/576310b7c6b7714aad05/raw/459d46761c231f5c373c1cf496920b01bb6669d2/.bash_aliases.git -O ~/.bash_aliases.git
echo "test -e ~/.bash_aliases.git && source ~/.bash_aliases.git" >> ~/.bashrc

Profitez-en! (^ O ^) /

effrayer
la source
1
Désolé, mais c'est quelque chose de complètement différent. Faire de tels alias simples pour des commandes entières est trivial.
Paweł Gościcki
Je les fais juste fonctionner comme le plugin git d'Oh-My-Zsh: github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/…
scue
-1

Vous pouvez simplement définir des alias comme d'habitude:

alias g='git'

Installez ensuite complete-alias pour rendre l'alias de complétion bash.

Cyker
la source