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

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! ;-)


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

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
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.