Autouzupełnianie Bash: najpierw wyświetl listę plików, a następnie je przeglądaj

27

Czy można skonfigurować bash w taki sposób, aby na pierwszej zakładce autouzupełniania wyświetlał wszystkie możliwe pliki, a przy kolejnych cyklach dokonywał wyborów?

Obie opcje są łatwe do zrobienia osobno i mógłbym powiązać je z różnymi kluczami, ale powyższe byłoby idealne, ale nie mogę nic na ten temat znaleźć w sieci.

Voo
źródło
3
Minęło trochę czasu, odkąd korzystałem z ZSH, ale wierzę, że takie funkcje autouzupełniania są takie.
jordanm,
1
@jordanm Cóż, wydaje się być opcją, jeśli nic innego nie działa, ale pociągałoby to za sobą aktualizację wszystkiego, od .bashrc itp. do ekwiwalentów ZSH, których chciałbym uniknąć.
Voo

Odpowiedzi:

31

To wydaje się bliskie temu, czego chcesz:

bind "TAB:menu-complete"
bind "set show-all-if-ambiguous on"
Jim Paris
źródło
1
Prawie idealnie, oprócz niewielkiej wady, która automatycznie uzupełnia się również na pierwszej karcie, co może być trochę denerwujące, jeśli próbuję tylko ustalić dokładną nazwę (tj. Muszę usunąć o wiele więcej znaków, jeśli chcę więc zmieńcie się), ale jestem gotów z tym żyć.
Voo
1
Jak można to łatwo cofnąć?
dingalapadum
1
bind "TAB:complete"; bind "set show-all-if-ambiguous off"
Jim Paris
13
@Voo dodaj trzeci wiersz bind "set menu-complete-display-prefix on"wyświetli listę kandydatów na pierwszej karcie bez automatycznego uzupełniania.
Naitree,
2
@Naitree nie może wystarczająco głosować za twoją sugestią. Działa i JEST, więc o wiele lepszy niż domyślne zachowanie bash. Dziękuję Ci.
JBeurer,
1

Tego używam. O ile mogę powiedzieć, robi dokładnie to, co chcesz.

# make tab cycle through commands after listing
bind '"\t":menu-complete'
bind "set show-all-if-ambiguous on"
bind "set completion-ignore-case on"
bind "set menu-complete-display-prefix on"

Działa to na komputerach Mac (10.13 i 10.14) i Ubuntu (16.04 i 18.04).

Milo
źródło
0

Czy rozważałeś? Odwołano się do niego w Superuser ...

[[ $- = *i* ]] && bind TAB:menu-complete
zadzwonić
źródło
1
menu-completeto tylko połowa tego, co zadaje pytanie. Jak mówi pytanie: „[inne] opcje są łatwe do zrobienia osobno” .
jw013,
Tak, wiem, jak zmienić zachowanie na jedną z dwóch opcji, ale to łatwa część. Prawdziwy problem polega na tym, jak połączyć oba w jedno.
Voo,