Przykładem:
Jestem na Macu z bash v3.2.17, używam git zainstalowanego przez macports z wariantem bash_completion.
Po wpisaniu git checkout m<tab>
. na przykład, ukończę to master
.
Jednak mam alias git checkout
, gco
. Kiedy piszę gco m<tab>
, nazwa oddziału nie jest automatycznie uzupełniana.
Idealnie byłoby, gdyby autouzupełnianie działało magicznie dla wszystkich moich aliasów. Czy to możliwe? W przeciwnym razie chciałbym ręcznie dostosować go dla każdego aliasu. Więc jak mam to zrobić?
Odpowiedzi:
Jak stwierdzono w komentarzach powyżej,
przestanie działać. Jednak
__git_complete
w git-uzupełnianie.bash jest funkcja, której można użyć do skonfigurowania zakończenia dla takich aliasów:źródło
__git_complete g __git_main
aby uzyskać uzupełnianie kodu działające na wszystkich poleceniach git.git-completion.bash
z<your git install folder>/etc/bash-completion.d/
do~/.git-completion.bash
kroku 2) dodajsource ~/.git-completion.bash
do.bash_profile
kroku 3) Dodaj__git_complete gco _git_checkout
dowolne miejsce po powyższej linii w pliku .bash_profile. Krok 4) Uruchom ponownie powłokę i ciesz się automatycznym uzupełnianiem aliasu! :)Natknąłem się również na ten problem i wymyśliłem ten fragment kodu. Spowoduje to automatyczne uzupełnienie wszystkich aliasów. Uruchom go po zadeklarowaniu wszystkich (lub dowolnych) aliasów.
źródło
let COMP_CWORD+=$num_alias_arguments
z jakiegoś powodu nie działała na Mac OS X. Zastąpienie go((COMP_CWORD+=$num_alias_arguments))
naprawionowrap_alias
dusi się w podwójnych cudzysłowach w definicji aliasu i myślę, że nie ma to większego sensu dla aliasów wielozadaniowych (alias 'foo=bar; baz'
), więc umieszczam dodatkowy| grep -v '[";|&]'
poalias -p
. Poza tym robi się trochę powolny w przypadku setek definicji aliasów, ale z przyjemnością potwierdzam, że użycieecho
zamiasteval
i przekazanie danych wyjściowych do pliku pamięci podręcznej (który można następnieeval
„za jednym zamachem”) działa dobrze i jest super szybkie .wrap_alias
wymaga skonfigurowania uzupełnień, więc musiałem przejśćsource /etc/bash_completion
przedwrap_alias
kodem.let COMP_CWORD+=$num_alias_arguments
nalet \"COMP_CWORD+=$num_alias_arguments\"
.W
git-completion.bash
istnieje linia:Patrząc na tę linię (i funkcję _git) możesz dodać tę linię do
.bash_profile
:źródło
Alias g = „git” i w połączeniu z aliasami git piszę takie rzeczy
Prostszym rozwiązaniem dla mojego konkretnego przypadku użycia było dodanie pojedynczej linii do git-complete.
Tuż poniżej tej linii:
Dodałem tę linię, aby obsługiwać mój pojedynczy alias „g”:
źródło
git-completion
ani tego wiersza/etc/bash_completion.d/git
, ale dodałemcomplete -o default -o nospace -F _git g
po moim aliasie.bash_aliases
i zadziałało!/etc/bash-completion.d/
lub w nowym/usr/share/bash-completion/
, utracisz zmiany za każdym razem, gdy plik zostanie zaktualizowany za pomocą menedżera pakietów.Tak, jest to możliwe dzięki projektowi z pełnym aliasem (w systemie Linux). Obsługa komputerów Mac jest eksperymentalna, ale użytkownicy zgłosili sukces.
źródło
Możesz także spróbować użyć aliasów Git. Na przykład w moim
~/.gitconfig
pliku mam sekcję, która wygląda następująco:Więc możesz wpisać
git co m<TAB>
, a to powinno rozwinąć się dogit co master
, które jestgit checkout
poleceniem.źródło
Ta strona forum pokazuje rozwiązanie.
Umieść te linie w swoim
.bashrc
lub.bash_profile
:To rozwiązanie jest podobne do skryptu balshetzera , ale tylko to faktycznie działa dla mnie. (skrypt balshetzera miał problemy z niektórymi moimi pseudonimami).
źródło
-bash: eval: line 28: unexpected EOF while looking for matching '''
-bash: eval: line 29: syntax error: unexpected end of file
"
cytaty wewnątrzfunction
ciągu powinny być cytowane jako\"
. To prawdopodobnie zjada jeden z twoich'
cytatów gdzieś wzdłuż linii.Jeszcze jedną opcją jest użycie
~/.bash_completion
pliku. Aby utworzyćgco
alias, pogit checkout
prostu wstaw to tutaj:Następnie
~/.bashrc
musisz wstawić sam alias:Dwie linie. Otóż to.
Wyjaśnienie:
~/bash_completion
Dostaje pozyskiwane na końcu głównego skryptu bash_completion. W Gentoo znalazłem główny skrypt/usr/share/bash-completion/bash_completion
._xfunc git
Nieco dba o zaopatrywaniu sięgit-completion
plik dla Ciebie, dzięki czemu nie trzeba kłaść indziej~/.bashrc
.Akceptowana odpowiedź wymaga skopiowania
.git-completion.sh
i pobrania jej z~/.bashrc
pliku, który uważam za kiepski.PS: Nadal próbuję wymyślić, jak nie pobierać całego
git-completion
skryptu do mojego środowiska bash. Skomentuj lub edytuj, jeśli znajdziesz sposób.źródło
_xfunc git
wymagane?source ~/.git-completion.sh
Niech I_xfunc
zrobić to za mnie. To po prostu przyjemniejsze i czystsze, gdy robi się to wyłącznie w~/.bash_completion
. Bez_xfunc
(lub pozyskiwania)__git_complete
funkcja nie istnieje.~/.bash_completion
Plik nie jest potrzebny -_xfunc
linia działa dla mnie w.bashrc
.Musisz po prostu znaleźć
complete
polecenie i powielić wiersz o nazwie alias.Mam
alias d-m="docker-machine"
. Innymi słowy,d-m
będzie to pseudonimdocker-machine
.Tak więc na Macu (przez napar) znajdują się pliki ukończenia
cd `brew --prefix`/etc/bash_completion.d/
.W moim przypadku edytowałem plik o nazwie
docker-machine
.Na dole było:
Właśnie dodałem kolejną linię z moim aliasem:
źródło
docker
alias dod
. Chociaż dla przykładu w pytaniu,git checkout
alias dogco
jest bardziej złożony.Najpierw wyszukaj oryginalne polecenie zakończenia. Przykład:
Teraz dodaj je do skryptu uruchamiania (np. ~ / .Bashrc):
_completion_loader
Może nie być wymagana linia. Ale w niektórych sytuacjach funkcja uzupełniania jest ładowana dynamicznie dopiero po wpisaniu polecenia iTAB
pierwszym naciśnięciu . Jeśli więc nie użyłeś oryginalnej komendy i wypróbowałeś alias +TAB
, możesz otrzymać błąd typu „bash: complete: nie znaleziono funkcji” _docker ”.źródło
Istnieje wiele odpowiedzi na to pytanie i podobnie jak ja stawiam na wielu zdezorientowanych czytelników. W moim przypadku miałem również wymaganie, aby moje pliki dot działały na wielu platformach z różnymi wersjami Git. Ja też nie,
alias g=git
ale zamiast tegog
zdefiniowałem jako funkcję.Aby to osiągnąć, musiałem połączyć różne odpowiedzi tutaj w jedno rozwiązanie. Chociaż to powtórzy już odpowiedzi, myślałem, że ktoś w mojej łodzi może uznać tę kompilację za przydatną, tak jak zrobiłbym to, kiedy po raz pierwszy zadałem to pytanie.
Zakłada to starsze i nowsze zakończenie Git, domyślne ustawienia Ubuntu i
brew install git
na MacOS. W późniejszym przypadku uzupełnienia instalacji naparu nie były przetwarzane przez bash (coś zdiagnozuję później).źródło
Jeśli używasz
alias g='git'
, dodaję ten wiersz kodu.bash_aliases
źródło