Jak utworzyć alias „git” na „g”, aby zachować reguły wykonywania bash?

25

Jeśli to zrobię:

alias g='git'

Tracę wszystkie zasady ukończenia (np. Gałęzie i piloty nie są już automatycznie uzupełniane, gdy na przykład uderzę TAB po wpisaniu g push o).

Paweł Gościcki
źródło
Chociaż nie mam dla ciebie odpowiedzi, będę musiał poświęcić chwilę i zastanawiać się, czy nie wpisanie tych dwóch innych liter naprawdę daje ci dużą przewagę?
Marco Ceppi
4
Jasne, że tak! Piszę „g” prawdopodobnie ponad 100 razy dziennie.
Paweł Gościcki,
3
Aliasing często używanych krótkich poleceń do jeszcze krótszych aliasów pozwala mi zaoszczędzić setki naciśnięć klawiszy dziennie. Zgodnie z moją historią powłoki użyłem aliasu g=git756 razy w ciągu ostatniego miesiąca, co oznacza, że ​​zapisałem naciśnięcie klawiszy „g” i „i” 1512 razy łącznie. To, w połączeniu z moimi aliasami git, prawdopodobnie oszczędza mi dziesiątki tysięcy naciśnięć klawiszy miesięcznie.
Głównym celem skrócenia naciśnięć klawiszy jest pomoc dłoniom w nadążaniu za mózgiem.
Tyler Collier
Skrypt na superuser.com/questions/436314/... działał tak dobrze, że myślę, że zasługuje na wzmiankę.
brandizzi

Odpowiedzi:

21

Skopiuj i zmodyfikuj odpowiednio z /etc/bash_completion.d/git, dodaj następujące wiersze do ~/.bashrc:

complete -o bashdefault -o default -o nospace -F _git g 2>/dev/null \
    || complete -o default -o nospace -F _git g
enzotib
źródło
Ha! Wunderbar! Działa tak, jak powinien :)
Paweł Gościcki
1
Musiałem także dodać source /usr/share/bash-completion/completions/gitdo mojego .bashrc
pcx
Nie jestem pewien, czy .bashrckod tutaj działa, ale ta odpowiedź jest zdecydowanie nieaktualna. /etc/bash_completion.d/gitwydaje się, że nie istnieje 14.04. Widzieć odpowiedź LZAP poniżej.
Max Wallace,
18

Ostatnie zakończenie bash upstream zostało nieco zmienione i zmieniono jego nazwę. Śnieży:

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

Użyj tego w najnowszych wersjach Ubuntu (np. 14.04, także Fedora 22+), gdy napotkasz:

completion: function `_git' not found

podczas wypełniania.

lzap
źródło
2
Wydaje się, że to jedyna poprawna odpowiedź tutaj.
pjvandehaar
Użyj __git_complete gc _git_checkout(lub podobnego), aby skonfigurować uzupełnienia dla bardziej szczegółowych aliasów. Wyszukaj /usr/.../gitjak powyżej, aby znaleźć właściwą nazwę.
Max Wallace,
1
@MaxWallace - po ustawieniu aliasów dla poszczególnych metod git w .gitconfig (np. Gc = checkout), nie ma potrzeby jawnego konfigurowania ich uzupełniania.
Piotr Aleksander Chmielowski
1
@PiotrAleksanderChmielowski Thanks! Ale nie sądzę, że to działa w przypadku aliasów bash najwyższego poziomu (np. gc=> git checkout), W przeciwieństwie do aliasu cdo checkoutwewnątrz giti mówienia git c. Popraw mnie, jeśli się mylę.
Max Wallace
@MaxWallace Tak, masz rację, mój błąd;)
Piotr Aleksander Chmielowski
2

Najpierw wyszukaj oryginalne polecenie zakończenia. Przykład:

$ complete | grep git

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

Teraz dodaj je do skryptu uruchamiania (np. ~ / .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

_completion_loaderMoże nie być wymagana linia. Ale w niektórych sytuacjach funkcja uzupełniania jest ładowana dynamicznie dopiero po wpisaniu polecenia i TABpierwszym naciśnięciu . Jeśli więc nie użyłeś oryginalnego polecenia i wypróbowałeś alias + TAB, możesz otrzymać błąd typu „bash: complete: not found function”.

wisbucky
źródło
Działa świetnie. Dla mnie to poprawna odpowiedź, przydatne jest polecenie grep po zakończeniu. Nie potrzebowałem modułu ładującego zakończenie.
Paul Carlton,
1

Aktualizowane sposób to zrobić (complete nie będzie działać dla mnie):

  1. cd - przejdź do katalogu domowego
  2. wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
  3. Dodaj source ~/git-completion.bashdo pliku .bashrc (jeśli nie masz tego pliku, stwórz go w folderze domowym, bash wyszuka go automatycznie)
  4. Dodaj alias g='git'do pliku .bashrc.
  5. Rozpocznij nową sesję lub źródło zmian source ~/.bashrc
Elijah Lynn
źródło
2
Pominąłeś fragment, w którym dodali uzupełnienie w komentarzu, do którego __git_complete g _git
linkowałeś
0

Dla kompletności chciałbym dodać odpowiedź za pomocą ~/.bash-completionpliku, który jest pozyskiwany na końcu skryptu bash-complete:

_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

Potem ~/.bashrcmam tylko pseudonimy. Próbowałem:

  • unikaj zanieczyszczania mojego ~/.bashrc pomocą bash-uzupełniania rzeczy (trzymaj rzeczy tam, gdzie należy) ✓
  • unikaj pozyskiwania całego polecenia git do mojej powłoki ☹

Bezsprzecznie _xfuncźródła i tak uzupełniają git. Zaktualizuję tę odpowiedź, kiedy wymyślę, jak to zrobić poprawnie (zapytałem również tutaj o lunchpad ).

kub1x
źródło
-1

Spójrz tutaj: 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

Enjoy! (^ O ^) /

scue
źródło
1
Przepraszam, ale to coś zupełnie innego. Tworzenie prostych aliasów dla całych poleceń jest banalne.
Paweł Gościcki
Po prostu sprawiam, że działają jak wtyczka git Oh-My-Zsh: github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/…
scue
-1

Możesz po prostu zdefiniować aliasy w zwykły sposób:

alias g='git'

Następnie zainstaluj pełny alias, aby rozpoznawać alias ukończenia bash.

Cyker
źródło