Uzupełnianie tabulacji bez rozróżniania wielkości liter w Bash

142

Czy jest jakiś sposób, aby tabulator Bash był niewrażliwy na wielkość liter?

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
Copyright (C) 2007 Free Software Foundation, Inc.

Używam Mac OS X 10.6

Jeffrey Aylesworth
źródło

Odpowiedzi:

170

Zaktualizuj tekst, /etc/inputrcaby zawierał

ustaw opcję zakończenia-ignoruj-wielkość liter

Następnie użyj ^X ^Rdo ponownego załadowania konfiguracji.

John T.
źródło
30
„również” - /etc/inputrclub ~/.inputrcplik wskazany przez INPUTRCto jedyne miejsca, do których może się udać. Wpisanie tego po znaku zachęty Bash nie będzie działać.
Dennis Williamson
ups! masz rację :)
John T
10
^X ^Rprzeładowaćinputrc
grawity
14
@DennisWilliamson: możesz to zrobić bind "set completion-ignore-case on"z wiersza poleceń; wierzę, że tylko ta sesja terminalowa
Clay Bridges
1
Więc to , co ma, lecz MSYS2 msysgit brakuje! Tutaj próbowałem go znaleźć np. W / etc / profile ...
SamB
111

Restrukturyzacji z perspektywy czasu Contrast plusy i minusy korzystania [.]inputrcVs. .bash_profile.
Porada czapki do underscore_d za jego pomoc.

Uwaga: Edycja wiersza poleceń w Bash jest zapewniana przez bibliotekę Readline; dostosowywanie go nie jest trywialne, ale warte nauki; jego funkcje obejmują możliwość definiowania niestandardowych skrótów klawiaturowych do wstawiania predefiniowanych fragmentów tekstu - patrz Edycja wiersza poleceń w Podręczniku użytkownika Bash

Aby uporczywie rozróżniać wielkość liter w Bash bez rozróżniania wielkości liter:


Opcja A: jeśli masz już:

  • /etc/inputrcpliku (w całym systemie stosuje, modyfikacji wymagają sudo)
  • i / lub ~/.inputrcplik (specyficzny dla użytkownika)

    i / lub

planujesz intensywnie dostosowywać bibliotekę readline i / lub chcesz, aby dostosowania były skuteczne również dla skryptów wywoływanych read -e:

Dodaj linię

set completion-ignore-case on

do dowolnego pliku, w zależności od tego, czy ustawienie ma być skuteczne dla wszystkich użytkowników, czy dla bieżącego użytkownika (w razie potrzeby utwórz plik).

Powiązane polecenie, które ułatwia uzupełnianie nazw plików i katalogów, to:

set show-all-if-ambiguous on

To sprawia, że ​​nie ma potrzeby dwukrotnego naciskania Tab, gdy występuje więcej niż jedno dopasowanie.


Opcja B: Alternatywnie możesz dodać polecenia Readline do ~/.bash_profilepliku specyficznego dla użytkownika w OS X (lub ~/.bashrcLinux), przekazując je jako pojedynczy argument do bindwbudowanego :

bind "set completion-ignore-case on"
bind "set show-all-if-ambiguous on"

Zauważ, że bindpolecenia w ~/.bash_profile/ ~/.bashrcmają pierwszeństwo przed równoważnymi poleceniami w jednym /etc/inputrclub ~/.inputrc.

Jak sugerowano powyżej, zdefiniowana w ten sposób konfiguracja Readline nie zadziała w skryptach, które wywołują read -eaktywację obsługi Readline do odczytu danych wprowadzanych przez użytkownika.

mklement0
źródło
10
show-all-if-niejednoznaczne jest takie miłe! Często zastanawiałem się, dlaczego dwukrotnie zmusili mnie do wykonania tej czynności. tysiące naciśnięć klawiszy zapisanych w mojej przyszłości! dzięki!
user34112,
4
Wspaniale, działa nawet dla cdpoleceń. Co rozwiązuje to pytanie i pozwoli mi zaoszczędzić tysiące naciśnięć klawiszy. :)
hoosierEE
1
Świetna uwaga re show-all-if-ambiguous. Jednak skoro mówisz „jako alternatywa”, czy rzeczywiście ma to jakąś korzyść z robienia tego za pośrednictwem bind, kiedy inputrcwydaje się, że pliki sprawiają, że jest to zbędne?
underscore_d
1
@underscore_d: Dobre pytanie; proszę zobaczyć moją zaktualizowaną odpowiedź.
mklement0
1
Fajne dzięki! Na Debianie 8.2 nie miałem żadnego inputrc, ale z radością stworzyłem ~/.inputrci dodałem je oraz inne naprawdę przydatne dyrektywy. Wydaje mi się, że zakładamy, że wszyscy czytelnicy wiedzą, że /etc/inputrc wpływa to na innych użytkowników (chyba że ci ostatni zastąpią ustawienia, których dotyczy problem)? Właśnie gdy wspominamy o zastrzeżeniach;)
podkreślenie_d
1

Aby uniknąć zmiany konfiguracji dla wszystkich użytkowników i uprawnień roota, użyj:

if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi
echo 'set completion-ignore-case on' >> ~/.inputrc

Następnie zaloguj się ponownie lub ponownie załaduj ~ / .inputrc

Ankur A Sharma
źródło