Jak zrobić autouzupełnianie terminala, gdy jest kilka plików / katalogów?

32

Jeśli mam kilka katalogów, takich jak:

afoo abar

czasami mój terminal odmawia autouzupełniania po naciśnięciu klawisza tab (np. „cd a”, a następnie tab) i wydrukowanie listy katalogów. Czasami nawet wydaje głośny, irytujący dźwięk. Masz pomysł, jak zrobić autouzupełnianie w takich przypadkach? Np. Może najpierw wyświetlić abar, a potem afoo, jeśli ponownie naciśniesz tab. Widziałem, że dzieje się tak w systemie Windows lub aprobacie w Ubuntu

TifatulS
źródło

Odpowiedzi:

46

Coś, co jest dla mnie ratowaniem życia, polega na tym, że zamiast wyświetlać głupią listę, przebijaj się przez możliwości.

Ponieważ bash korzysta readlinez automatycznego uzupełniania, dodaj następujące wiersze do~/.inputrc

Raz jesteś usatysfakcjonowany i zostały gruntownie przetestowane rozwiązania poniżej na kilka dni / tygodni, wycinania i wklejania (nie kopiować!) Z tych samych ustawień ~/.inputrcdo /etc/inputrcktórych zawiera ustawień systemowych, dzięki czemu jest dostępny dla wszystkich użytkowników w systemie (w tym gość).

Kod:

# mappings to have up and down arrow searching through history:
"\e[A": history-search-backward
"\e[B": history-search-forward
# mappings to have left and right arrow go left and right: 
"\e[C": forward-char
"\e[D": backward-char

# mapping to have [Tab] and [Shift]+[Tab] to cycle through all the possible completions:
"\t": menu-complete
"\e[Z": menu-complete-backward

następnie exittwój terminal (lub zdalny terminal jak kit) i otwórz go ponownie ...

Przykłady:

  1. Gdy masz 3 pliki: file1, file2a file3i wpisać:

    e fTabTabTab

    przejdzie przez:

    e file1
    e file2
    e file3

    a jeśli chcesz jeździć wstecz, po prostu naciśnij Shift+Tab

  2. Kiedy piszesz:

    very-complicated-command with lots of command line parameters

    i następnym razem, gdy będziesz potrzebować tego samego polecenia, po prostu wpisz:

    very

    i napisze dla Ciebie:

    very-complicated-command with lots of command line parameters

Zaoszczędzi ci to mnóstwo czasu w bash! ;-)

Fabby
źródło
2
+1, interesujące, ale: 1. ~/.inputrcmoże być lepsze niż /etc/inputrci 2. Myślę, że możesz ustawić to bashbezpośrednio: unix.stackexchange.com/q/55203/70524 , unix.stackexchange.com/a/16926/70524
muru
To całkiem miłe, dziękuję (i mam moje głosowanie). Czy istnieje uniwersalny sposób na pokazanie opcji, przez które będzie przechodził, łączący to, co najlepsze z obu światów? Podoba mi się opcja tab + tab z folderami i podkomendami itp., Więc nie muszę pamiętać ich wszystkich (np git branch <tab through branches>. Gdybym widział listę i tabulację poprzez jej elementy, byłoby świetnie! Dla katalogów i plików lsjest opcja, aby zobaczyć, jakie elementy są dostępne. Jednak w przypadku podkomend nie jest to niestety takie łatwe lub oczywiste
Erik
Działa to również na PuTTy! Musiałem tylko raz go zrestartować :)
np8
@Erik: Najwyraźniej to, o co prosiłeś, jest możliwe, ale nie zamierzam edytować mojej odpowiedzi, aby zachować prostotę. (usunięto stary komentarz, że nie jest to możliwe)
Fabby
18

Po 1. tabmusisz wstawić więcej liter. Więc jeśli napiszesz

cd a

i uderzysz tab, nic nie dostaniesz, a po sekundzie tab(natychmiast po nim) otrzymasz listę nazwisk zaczynających się od, aa następnie musisz wstawić, faby automatycznie uzupełniała resztę, więc

cd atabtabftabtab

spowoduje

cd afoo
Rinzwind
źródło
2
IMHO: To jest właściwa droga. Osobiście uważam zachowanie systemu Windows za bardzo denerwujące. Rozważ przypadek, w którym masz wiele plików zaczynających się od ai potrzebujesz ostatniego. Gdy przypadkowo naciśniesz klawisz Tab po aprzejściu przez listę wszystkich możliwych uzupełnień, aby przejść do właściwego.
Tobias
@Tobias: gdy przypadkowo wcisnąłeś [Tab] zbyt wcześnie, używając innego systemu , nadal jest [Ctrl] [K] ... ;-)
Fabby