Jak sprawić, aby zakończenie Zsh działało bardziej jak zakończenie BASH?

18

Jestem niedawną konwersją z bash na zsh (z której używam „oh my zsh” z), ale jedno mnie denerwuje:

Po naciśnięciu klawisza tab, pierwsze autouzupełnianie jest wypełniane automatycznie, a ty musisz cyklicznie wykonywać uzupełnienia, naciskając kilkakrotnie klawisz tab.

Różni się to od bash, gdzie właśnie pokazano listę zakończeń. Jeśli wszystkie uzupełnienia mają ten sam prefiks, wówczas ten prefiks jest wypełniany. Możesz wybrać ten, który chcesz, kontynuując pisanie.

Uważam, że to drugie jest lepsze, ponieważ jest szybsze pisanie niż wybieranie uzupełnienia przez kilkakrotne naciśnięcie klawisza Tab.

Czy jest jakiś sposób, aby uzupełnienie zsh działało bardziej jak bash pod tym względem?

zdrowie psychiczne
źródło

Odpowiedzi:

18
setopt noautomenu
setopt nomenucomplete

Potrzebujesz ich obu. Jeśli naciśniesz klawisz Tab wystarczającą ilość razy, otrzymasz listę ukończeń, ale nigdy nie dodasz żadnych znaków do tego, co wpisałeś do tej pory.

Eyal
źródło
4

Nie sądzę, że jest to zachowanie domyślne, ale możesz je wyłączyć, używając:

setopt +o menucomplete

Inne ustawienia, które wpływają na ten problem na różne sposoby to: autolist, automenu, bashautolist, listambiguous. Aby man zshoptionsuzyskać szczegółowe informacje, zobacz sekcję „Zakończenie” . Możesz dodać to polecenie do swojego ~/.zshrcpliku.

Możesz skonfigurować wiele innych rzeczy interaktywnie, wykonując:

autoload -U compinstall
compinstall

i postępując zgodnie z instrukcjami i menu.

W Basha to zachowanie jest sterowany przez wiązanie Tabdo completelub menu-completew ~/.inputrc:

"\C-i": complete   # do list completion

lub z linii poleceń lub w ~/.bashrc:

bind '"\C-i": menu-complete' # do menu completion
Wstrzymano do odwołania.
źródło
1
meta komentarz: jak udało ci się tak wyglądać „tab”?
Dobra osoba
2
@Dobra osoba:<kbd>Tab</kbd>
Wstrzymano do odwołania.