2010-11-19 16 views
17

W zsh, mam funkcję o nazwie g który działa tak:zsh: Użycie oddane do poleceń X Po wpisaniu polecenia Y

  • bez argumentów, zadzwoń git status
  • z jednym lub więcej argumentów, przekazać do git ze wszystkich podanych argumentów - czyli zadzwonić git [email protected]

Chciałbym, uzupełnień zakładkę g być dokładnie takie same jak dla git. Mogę to osiągnąć za pomocą alias g=git, ale to nie pozwala mi domyślnie wywoływać status (pierwszy punkt powyżej).

Jak mogę przekazać zlecenie na zakończenie git?

W bashu po prostu wykonałem polecenie complete -F _git g, które ponownie wykorzystuje funkcję uzupełniania git. W przypadku zsh ukończenie gita wygląda na bardziej złożone i nie uda mi się znaleźć podobnego rozwiązania.

Zgaduję, że w zsh jest jakaś funkcja, która mówi "udawaj, że wpisałem polecenie [x], do czego byś dokończył?". Gdybym wiedział, co to jest, powinno być dość proste, aby użyć funkcji do delegowania do niego. Ale nie znalazłem takiej funkcji w podręcznikach.

+0

Dziękuję za poradę, jak sprawić, by działało w bash! –

Odpowiedz

17

Dokumentacja compdef mówi tak:

Funkcja compdef można stosować skojarzyć istniejące funkcje uzupełniania o nowe polecenia. Na przykład,

compdef _pids foo 

Ale dostosowując ją (_git jest zwykle funkcją Zakończenie dla git) nie przyniosły rezultatu pracy dla mnie (nawet po _git były ładowane automatycznie):

compdef _git g 

Udało mi się go uruchomić za pomocą _dispatch jednak:

compdef '_dispatch git git' g 
+1

To dziwne. Mam to samo, ale inne funkcje uzupełniania działają dobrze przy pierwszym poleceniu. –

+1

świetnie, dziękuję bardzo! Jeśli chodzi o powód, dla którego pierwszy nie działa, być może zakończenie dla _git jest wystarczająco niestandardowe, że samo przekierowanie go nie wystarcza, aby odpowiedzieć cokolwiek pożytecznego? (tzn. może sprawdza, czy polecenie zaczyna się od "git"). – gfxmonk

+2

Każdy pomysł, w jaki sposób "compdef" _dispatch git git 'g' może zostać dostosowany tak, by g-dopełnianie było jak git-status, a nie tylko git? –

Powiązane problemy