Jak wypisywać uzupełnienia ciągów na standardowe wyjście?


15

Niektóre gitpolecenia mają wiele opcji i często przydałoby się przeszukać je pod kątem tego, czego potrzebuję - szukałem tylko opcji, która kontroluje TABszerokość git-gui, ale jest około 200 uzupełnień git config. Oczywistym obejściem jest skopiowanie wszystkich uzupełnień do edytora i przeszukanie ich, ale wolałbym to zrobić

[something] | grep tab

Nie istnieją manlub infostron dla compgen, help compgennawet nie wyjaśniają własne opcje, a nie ma autouzupełnianie dla compgen(jak na ironię, że?).

PS: compgen -Anie działa.

PPS: To nie jest pytanie git-gui- Rozwiązanie pytania o szerokość zakładki było gdzie indziej.

PPPS: Tu nie chodzi o automatyczne uzupełnianie poleceń, tylko parametry poleceń .


Jest to bardzo podobne do Jak potokować wyjście „Tab Complete”? , ale przyjęta odpowiedź dotyczyła wypełniania poleceń, a nie argumentów
Michał Mrożek

Odpowiedzi:


10

Możesz użyć następującej funkcji, która używa tego samego sposobu, w jaki sudoautomatyczne uzupełnianie generuje listę ukończeń:

comp() {
    local COMP_LINE="$*"
    local COMP_WORDS=("$@")
    local COMP_CWORD=${#COMP_WORDS[@]}
    ((COMP_CWORD--))
    local COMP_POINT=${#COMP_LINE}
    local COMP_WORDBREAKS='"'"'><=;|&(:"
    # Don't really thing any real autocompletion script will rely on
    # the following 2 vars, but on principle they could ~~~  LOL.
    local COMP_TYPE=9
    local COMP_KEY=9
    _command_offset 0
    echo ${COMPREPLY[@]}
}
comp git config ''

gdzie _command_offsetjest zdefiniowane w bash-complete (pakiet).

UWAGA: funkcja musi być uruchomiona w interaktywnej powłoce (tzn. Jeśli znajduje się w pliku, plik musi zostać pobrany zamiast po prostu uruchomić.) Lub konieczne reguły / funkcje uzupełniania nie zostaną zdefiniowane.

PS. compgen -Adziała tylko dla wbudowanych akcji, to co powinieneś wypróbować (ale też nie działa) to compgen -F(lub faktycznie compgen -o bashdefault -o default -o nospace -F _git). Powód, dla którego to nie działa (i doc dla wbudowanych poleceń bash, w tym compgen / complete) można znaleźć w bash (1) .


Mam nadzieję, że @ l0b0 działa we wszystkich przypadkach.
yuyichao,

Doskonale, działa! Zrobiłem kilka drobnych poprawek i teraz jest to na dobre .bash_aliases . Możesz przycinać, aby pozostało tylko rozwiązanie, ale nie ma wątpliwości, że dostaniesz nagrodę. Usunę komentarze z dyskusji, ponieważ nie są one już istotne.
l0b0

1
Przekonałem się, że użycie tego w interaktywnej powłoce może zniszczyć już uzupełnianie tabulatorów. Uczynienie każdej zmiennej lokalną dla funkcji rozwiązuje ten problem. (np. local COMP_LINE="$*")
AL Flanagan

@ALFlanagan Dobry punkt. Zaktualizowano
yuyichao
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.