Chcę uzyskać uzupełnianie tabulatorami w moich aliasach wiersza poleceń, na przykład powiedzmy, że zdefiniowałem następujący alias:
alias apt-inst='sudo aptitude install'
Czy istnieje sposób, aby uzyskać uzupełnienia dostarczone przez aptitude po naciśnięciu klawisza Tab? tzn. kiedy piszę „sudo aptitude install gnumer” i wciskam tab, aptitude uzupełnia to do gnumeric, lub jeśli nie było pewności, wyświetla listę wszystkich dostępnych pakietów zaczynających się od gnumer. Jeśli zrobię to, używając mojego aliasu, nic - bez uzupełnienia.
bash
alias
autocomplete
levesque
źródło
źródło
Odpowiedzi:
Jest świetny wątek na ten temat na forach Ubuntu . Ole J proponuje następującą funkcję definicji zakończenia aliasu:
Użyj go, aby zdefiniować funkcję uzupełniania dla swojego aliasu, a następnie określ tę funkcję jako funkcję uzupełniającą dla aliasu:
Wolę używać aliasów do dodawania zawsze używanych argumentów do istniejących programów. Na przykład za pomocą
grep
zawsze chcę pomijać urządzenia i pliki binarne, więc tworzę alias dlagrep
. Do dodawania nowych poleceń, takich jakgrepbin
, używam skryptu powłoki w moim~/bin
folderze. Jeśli ten folder znajduje się na twojej ścieżce, zostanie on automatycznie uzupełniony.źródło
complete -o default -F ...
zamiast tego,complete -F ...
aby automatyczne uzupełnianie nazw plików działało poprawnie podczas przekazywania argumentów (Bash 4.3.46).Wypróbuj pełny alias , który dokładnie rozwiązuje ten problem.
Po zainstalowaniu możesz użyć jednej funkcji ogólnej, aby uzupełnić wiele aliasów:
Możesz chcieć zdobyć plik complete_alias w każdej instancji bash poprzez
.bash_profile
lub podobnie.instalacja
podanie
container
może być teraz automatycznie_docker()
uzupełniany przez oryginalną procedurę obsługi zakończenia;źródło
2018 odpowiedź
Musisz dodać swój alias do programu jako „kompletny”. W zależności od rodzaju autouzupełniania, które chcesz osiągnąć, musisz użyć -c lub -F.
W przypadku autouzupełniania pakietów:
W przypadku autouzupełniania poleceń:
Aby sprawdzić, czy Twój alias został poprawnie dodany:
Wreszcie, aby usunąć alias z „kompletnego”:
W Twoim przypadku:
źródło
complete -F xxx
nie działa na OSX (pokazuje tylko użyciecomplete: usage: complete [-abcdefgjksuv] [-pr] [-o option] [-A action] [-G globpat] [-W wordlist] [-P prefix] [-S suffix] [-X filterpat] [-F function] [-C command] [name ...]
). Czy masz jakiś wskaźnik? Dzięki.Oto kod z odpowiedzi Shawna J. Goffa z pewnymi ulepszeniami:
shell-check
, np pierwszy"
od"$@"
faktycznie skończyło ciąg definicji funkcji.return 0
tak, aby zwracana wartość funkcji bazowej mogła zostać zwrócona z powrotem do obiektu wywołującego..
źródło
COMP_WORDS
tablicy argumentów funkcji zewnętrznej . Jeśli użyjemymake-completion-wrapper _apt_get _apt_get_install apt-get install
jako przykładu, poshift 2
,$@
zawieraapt-get install
. Definicja funkcji obejmujeapt-get install
(dwa dosłowne słowa) podczas przypisywaniaCOMP_WORDS
.Jako rozszerzenie odpowiedzi @Giles, następująca funkcja wygody automatycznie zmienia nazwy generowanego opakowania,
make-completion-wrapper
aby umożliwić zdefiniowanie zakończenia w jednym wierszu:źródło