Come alias ‘git’ in ‘g’ in modo che le regole di completamento bash siano preservate?

Se faccio questo:

alias g='git' 

Perdo tutte le regole di completamento (es. Rami e telecomandi non vengono più completati automaticamente quando toccherò TAB dopo aver digitato, per esempio g push o ).

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

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

L’ultimo bash-completion upstream è stato 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.

In ~/.bashrc :

 alias g='git' source /usr/share/bash-completion/completions/git complete -o default -o nospace -F _git g 

Tramite http://29a.ch/2013/8/9/fixing-bash-autocomplete-on-ubuntu-13-04

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

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

Per prima cosa, cerca il comando di completamento originale. Esempio:

 $ complete | grep git complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git 

Ora aggiungi questi al tuo script di avvio (ad esempio ~ / .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 riga _completion_loader potrebbe non essere richiesta. Ma per alcune situazioni, la funzione di completamento viene caricata solo dynamicmente dopo aver digitato il comando e premuto TAB la prima volta. Quindi, se non hai usato il comando originale e prova l’alias + TAB , potresti ricevere un errore come “bash: completamento: funzione non trovata”.

Solo per completezza, vorrei aggiungere una risposta usando il file ~/.bash-completion , che viene acquisito alla fine dello script di bash-completion:

 _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 ~/.bashrc ho solo gli alias. Stavo cercando di:

  • evitare di polarizzare il mio ~/.bashrc con materiale di completamento di bash (mantieni le cose a cui appartiene) ✓
  • evita di procurarti l’intero completamento del git nel mio guscio ☹

Inevitabilmente, il _xfunc comunque il completamento git. Aggiornerò questa risposta una volta capito come farlo correttamente (ho anche chiesto su lunchpad qui ).

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 ^) /

Puoi semplicemente definire alias come al solito:

 alias g='git' 

Quindi installare l’ alias completo per rendere bash alias di completamento bash.