Come alias 'git' a 'g' in modo da preservare le regole di completamento bash?


25

Se lo faccio:

alias g='git'

Perdo tutte le regole di completamento (ad esempio rami e telecomandi non vengono più completati automaticamente quando premo TAB dopo aver digitato, ad esempio g push o).


Anche se non ho una risposta per te, dovrò prendermi un minuto e mi chiedo se non scrivere quelle altre due lettere ti sta davvero dando un grande vantaggio?
Marco Ceppi

4
Certo che lo fa! Sto digitando 'g' probabilmente più di 100 volte al giorno.
Paweł Gościcki,

3
L'aliasing di comandi brevi spesso usati per alias anche più brevi mi fa risparmiare centinaia di pressioni di tasti al giorno. Secondo la mia storia della shell, ho usato l'alias g=git756 volte nell'ultimo mese, il che significa che ho salvato premendo i tasti 'g' e 'i' 1512 volte in totale. Questo, combinato con i miei alias git, probabilmente mi fa risparmiare decine di migliaia di pressioni di tasti al mese.

Il punto principale di accorciare i tasti è aiutare le mani a tenere il passo con il cervello.
Tyler Collier,

La sceneggiatura su superuser.com/questions/436314/… ha funzionato così bene, penso che meriti una menzione.
Brandizzi,

Risposte:


21

Copiando e modificando opportunamente da /etc/bash_completion.d/git, aggiungi le seguenti righe al tuo ~/.bashrc:

complete -o bashdefault -o default -o nospace -F _git g 2>/dev/null \
    || complete -o default -o nospace -F _git g

Ha! Wunderbar! Funziona proprio come dovrebbe :)
Paweł Gościcki,

1
Ho anche dovuto aggiungere source /usr/share/bash-completion/completions/gital mio .bashrc
pcx il

Non sono sicuro se il .bashrccodice qui funziona, ma questa risposta è decisamente obsoleta. /etc/bash_completion.d/gitnon sembra esistere il 14.04. Vedi la risposta di lzap di seguito.
Max Wallace,

18

L'ultimo uph-completamento a monte ha spostato e rinominato un po 'le cose. Nevica:

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

Usalo nelle ultime versioni di Ubuntu (es. 14.04, anche Fedora 22+) quando incontri:

completion: function `_git' not found

durante il completamento.


2
Sembra che questa sia l'unica risposta corretta qui.
pjvandehaar,

Utilizzare __git_complete gc _git_checkout(o simile) per impostare i completamenti per alias più specifici. Cerca /usr/.../gitcome sopra per trovare il nome giusto.
Max Wallace,

1
@MaxWallace - quando si impostano gli alias per particolari metodi git in .gitconfig (es. Gc = checkout), non è necessario configurare esplicitamente il completamento per loro.
Piotr Aleksander Chmielowski il

1
@PiotrAleksanderChmielowski Grazie! Ma non credo che funziona per gli alias bash di livello superiore (ad esempio gc=> git checkout) al contrario di aliasing ca checkoutdentro git, e dicendo git c. Correggimi se sbaglio.
Max Wallace,

@MaxWallace Sì, hai ragione, errore mio;)
Piotr Aleksander Chmielowski


2

Innanzitutto, cerca il comando di completamento originale. Esempio:

$ complete | grep git

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

Ora aggiungili al tuo script di avvio (ad es. ~ / .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_loaderlinea potrebbe non essere richiesta. Ma per alcune situazioni, la funzione di completamento viene caricata in modo dinamico solo dopo aver digitato il comando e premuto TABla prima volta. Quindi se non hai usato il comando originale e provi l'alias + TAB, potresti ricevere un errore del tipo "bash: completamento: funzione non trovata".


Funziona alla grande. Per me questa è la risposta corretta, il comando grep su complete è utile. Non è necessario il caricatore di completamento.
Paul Carlton,

1

Il modo aggiornato per farlo (complete non funzionerebbe per me):

  1. cd - passa alla tua home directory
  2. wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
  3. Aggiungi source ~/git-completion.bashal tuo file .bashrc (se non hai questo file creane uno nella tua cartella home, bash lo cercherà automaticamente)
  4. Aggiungi alias g='git'al tuo file .bashrc.
  5. Inizia una nuova sessione o invia le modifiche con source ~/.bashrc

2
Hai saltato la parte in cui hanno effettivamente aggiunto il completamento nel commento a cui hai collegato:__git_complete g _git
pjvandehaar,

0

Solo per completezza, vorrei aggiungere una risposta usando il ~/.bash-completionfile, che viene fornito alla fine dello script bash-completamento:

_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

Quindi nel mio ~/.bashrcho solo gli alias. Stavo cercando di:

  • evitare di inquinare il mio ~/.bashrccon roba di completamento bash (tenere roba dove appartiene) ✓
  • evita di procurarmi l'intero completamento git nel mio guscio ☹

Indubbiamente le _xfuncfonti del completamento git comunque. Aggiornerò questa risposta una volta che avrò capito come farlo correttamente (ho anche chiesto su lunchpad qui ).


-1

Guarda qui: 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

Buon divertimento! (^ O ^) /


1
Scusa, ma è qualcosa di completamente diverso. Fare alias così semplici per interi comandi è banale.
Paweł Gościcki,

Li faccio semplicemente funzionare come plugin git di Oh-My-Zsh: github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/…
scue

-1

Puoi semplicemente definire gli alias come al solito:

alias g='git'

Quindi installare alias completo per rendere alias il completamento bash.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.