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

24

Se faccio questo:

alias g='git'

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

    
posta Paweł Gościcki 19.09.2011 - 15:02

8 risposte

20

Copia e modifica 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
    
risposta data enzotib 19.09.2011 - 15:20
16

Ultimato il completamento di bash spostato e rinominato un po 'le cose. È ora:

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

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

completion: function '_git' not found

durante il completamento.

    
risposta data lzap 30.06.2015 - 16:58
6

In ~/.bashrc :

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

Via link

    
risposta data hnasarat 22.10.2014 - 17:48
1

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 genera le modifiche con source ~/.bashrc
risposta data Elijah Lynn 30.07.2013 - 15:56
1

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 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 riga _completion_loader potrebbe non essere richiesta. Ma per alcune situazioni, la funzione di completamento viene caricata solo dinamicamente 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".

    
risposta data wisbucky 27.07.2018 - 00:59
0

Solo per completezza, vorrei aggiungere una risposta utilizzando il file ~/.bash-completion , che viene acquisito alla fine dello script di completamento 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

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

  • evita di aggiungere il mio ~/.bashrc a materiale di completamento di bash (mantieni i contenuti a cui appartiene) ✓
  • evitare di effettuare l'acquisizione dell'intero git-completion nella mia shell ☹

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

    
risposta data kub1x 26.02.2016 - 14:00
-1

Guarda qui: link

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

Enjoy! (^ O ^) /

    
risposta data scue 14.05.2015 - 09:10
-1

Potresti semplicemente definire alias come al solito:

alias g='git'

Quindi installa alias completo per rendere l'alias di completamento di bash consapevole.

    
risposta data Cyker 24.12.2016 - 08:27

Leggi altre domande sui tag