Czy mogę ustawić automatyczne uzupełnianie tabulacji bez rozróżniania wielkości liter w Bash?

144

Terminal Ubuntu korzysta z automatycznego uzupełniania z rozróżnianiem wielkości liter, jak przypuszczam, że można się spodziewać po Linuksie.

Ale wydaje mi się, że często wygodniej byłoby użyć bez rozróżniania wielkości liter, aby zaoszczędzić ci dokładności podczas rozpoczynania nazwy i prawdopodobnie byłby wart dodatkowych fałszywych trafień. Czy można zmienić to zachowanie?

mwfearnley
źródło
Bardzo dobre pytanie. Uzupełnianie tabulatorów jako narzędzie użyteczności nie powinno być tak rygorystyczne, jak system komputerowy, jeśli chodzi o nazywanie rzeczy.
masterxilo

Odpowiedzi:

169

Aby bashrozróżnić wielkość liter dla bieżącego użytkownika:

Uruchom następujący skrypt powłoki w terminalu:

# If ~/.inputrc doesn't exist yet: First include the original /etc/inputrc
# so it won't get overriden
if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi

# Add shell-option to ~/.inputrc to enable case-insensitive tab completion
echo 'set completion-ignore-case On' >> ~/.inputrc

Uruchom nową powłokę (ponownie otwórz terminal).

Aby wprowadzić zmiany w całym systemie:

# add option to /etc/inputrc to enable case-insensitive tab completion for all users
echo 'set completion-ignore-case On' >> /etc/inputrc
# you may have to use this instead if you are not a superuser:
echo 'set completion-ignore-case On' | sudo tee -a /etc/inputrc

Aby uzyskać szczegółowe informacje, patrz man bash. Tak, jest to długa strona, ale bash jest dość złożonym programem, a jeśli chcesz po prostu wyszukać na tej stronie „bez rozróżniania wielkości liter”, aby przejść do odpowiedniej sekcji. Ludzie zwykle uczą się bash jednej opcji na raz lub jednego skryptu bash na raz i opanowanie wszystkich niuansów zajmuje dużo czasu. Twoje zainteresowania mogą się różnić.

Pantera
źródło
Dzięki. Doceniam rozwiązanie przyjazne dla użytkownika / nieadministracyjne. Wygląda na to, że linia echa działała, ale teraz wydaje mi się, że straciłem możliwość używania Ctrl-Lewo / Prawo do poruszania kursorem. Czy byłoby >>też bezpieczniejsze niż >?
mwfearnley,
Ogólnie >> będzie bezpieczniej, mój błąd, zakładałem, że nie masz ~ / .inputrc. Ustawiłem również noclobber =) Nie wiem, dlaczego klawisze strzałek nie działają, nie mogę tego zreplikować. Możesz usunąć ~ / .inputrc i uruchomić nową powłokę.
Panther,
Tak, to znów działa, jeśli go usunę . Zgodnie z linuxfromscratch.org/blfs/view/5.1/postlfs/inputrc.html nowy inputrc może zastąpić globalny?
mwfearnley,
2
Jasna cholera, skopiowałem to do / etc / inputrc i nie mogę już pisać „i”, a kiedy wpisuję „e”, to po prostu wysyła „ssssssssss [..]” do konsoli .. lepiej użyj rozwiązania z @ emtin4
Luca Steeb,
2
@LucaSteeb Też uderzyłem, ale potem zdałem sobie sprawę, że ten cały blok nie powinien być umieszczony w twoim .inputrc, ale wpisany raz. Tylko $include /etc/inputrci set completion-ignore-case onpowinien znajdować się w pliku ~ ..inputrc.
Chris
49

Otwórz terminal i wpisz poniższe polecenie:

echo set completion-ignore-case on | sudo tee -a /etc/inputrc

Wprowadź hasło. Uruchom ponownie terminal.

Jeśli w niektórych przypadkach chcesz usunąć wielkość liter, po prostu edytuj plik / etc / inputrc, usuwając set completion-ignore-casewiersz.

To wszystko.

emtin4
źródło
OK, wyjaśniłem to dla ciebie. Nauczenie się bash zajmuje trochę czasu, ale wciąż eksploruj, czytaj i pytaj. linuxcommand.org to popularny początek;)
Panther
3
W przypadku, gdy jest więcej niż jeden użytkownik, zmienia się to dla wszystkich, co może, ale nie musi być pożądanym zachowaniem
Walter Tross
2
zdecydowanie najprostsza i najprostsza odpowiedź tutaj
workabyte
prosta i jasna odpowiedź
Developerium
11

Wiem, że to pytanie jest bardzo stare, ale chyba że coś mi brakuje, myślę, że mam super proste rozwiązanie, jeśli używasz bash.

echo "bind 'set completion-ignore-case on'" >> ~/.bashrc

Lub po prostu dodaj wiersz za pomocą swojego ulubionego edytora tekstu. Uruchom ponownie sesję bash i ciesz się.

init3
źródło
2
Cóż, czegoś brakuje: ~/.inputrcjest czytany przez readline, czyli tego, czego używa bash w celu zapewnienia tego zakończenia. Readline jest również używany przez inne programy, więc dla ogólnego ustawienia tego, ~/.inputrczgodnie z sugestią, zaakceptowana odpowiedź byłaby lepsza.
muru
Dziękuję za twoją sugestię, uczy mnie to trochę więcej, ale muszę powiedzieć, że nie wydaje się to prostsze niż ta, którą zaakceptowałem, która używa tylko dodatkowego wiersza, aby upewnić się, że nowy plik nie unieważnia starego.
mwfearnley
doskonały. no cóż, jedyną rzeczą do zapamiętania jest bind 'set completion-ignore-case on'pójście w nowej linii.bashrc
Vishrant,
3

Możesz to zrobić ustawiając zmienną konfiguracyjną dla readline GNU, która obsługuje dane wejściowe w interaktywnej powłoce.

Potrzebną zmienną jest completion-ignore-casei można ją ustawić bezpośrednio w sesji bash za pomocą:

bind "set completion-ignore-case on"

Można go włączyć dla wszystkich przyszłych sesji bash, umieszczając go w ~/.inputrcpliku użytkownika lub w systemie /etc/inputrc, aby włączyć go dla wszystkich użytkowników. To jest plik inicjujący readline.

Pamiętaj jednak, że jeśli utworzysz ~/.inputrc, zastąpi to kopię systemową . (Dla mnie spowodowało to utratę niektórych kluczowych mapowań, takich jak Ctrl-Left/ Right. Możesz zobaczyć, które z nich można odczytać z /etc/inputrcpliku.)
Aby rozwiązać ten problem, umieść wiersz $include /etc/inputrcna górze ~/.inputrc, np .:

$include /etc/inputrc

set completion-ignore-case on

Aby zastosować zmiany, uruchom bash lub przeładować inputrc , np Ctrl+x, Ctrl+r.

Więcej informacji o readline i inputrc można znaleźć w man bashi man 3 readline.

mwfearnley
źródło