Posso rendere insensibile al maiuscolo / minuscolo di Tab in Bash?


144

Il terminale di Ubuntu utilizza il completamento automatico con distinzione tra maiuscole e minuscole, come suppongo ci si aspetterebbe per Linux.

Ma penso che sarebbe spesso più conveniente usarne uno senza distinzione tra maiuscole e minuscole, per evitare di dover essere precisi mentre si inizia un nome e probabilmente varrebbe la pena di aggiungere falsi positivi. È possibile cambiare questo comportamento?


Ottima domanda Come strumento di usabilità, il completamento delle schede non dovrebbe essere rigoroso come il sistema informatico in generale quando si tratta di nominare le cose.
Masterxilo,

Risposte:


170

Al fine di rendere bashcase-sensitive per l'utente corrente:

Esegui il seguente script di shell in un terminale:

# 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

Avvia una nuova shell (riapri il terminale).

Per apportare le modifiche a livello di sistema:

# 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

Per i dettagli, vedere man bash. Sì, è una pagina lunga, ma bash è un programma un po 'complesso, e se vuoi semplicemente cercare quella pagina senza distinzione tra maiuscole e minuscole, vai alla sezione pertinente. Le persone di solito imparano bash un'opzione alla volta o uno script bash alla volta e ci vuole molto tempo per padroneggiare tutte le sfumature. Il tuo interesse può variare.


Grazie. Apprezzo la soluzione specifica dell'utente / non amministratore. La linea dell'eco sembra aver funzionato, ma ora sembra che abbia perso la possibilità di usare Ctrl-Sinistra / Destra per spostare il cursore. Inoltre, sarebbe >>più sicuro di >?
mwfearnley,

In generale >> sarà più sicuro, errore mio, supponevo che tu non avessi un ~ / .inputrc. Ho anche impostato noclobber =) Un po 'certo perché i tuoi tasti freccia non funzionano, non posso replicarlo. È possibile rimuovere ~ / .inputrc e avviare una nuova shell.
Pantera

Sì, funziona di nuovo se lo rimuovo. Secondo linuxfromscratch.org/blfs/view/5.1/postlfs/inputrc.html il nuovo inputrc potrebbe sostituire quello globale?
mwfearnley,

2
Merda, l'ho copiato in / etc / inputrc e non riesco più a digitare "i" e quando scrivo "e" si spammano semplicemente "ssssssssss [..]" nella console .. meglio usare la soluzione di @ emtin4
Luca Steeb,

2
@LucaSteeb Ho colpito anche quello, ma poi ho capito che l'intero blocco non doveva essere inserito nel tuo .inputrc, ma digitato una volta. Solo $include /etc/inputrce set completion-ignore-case ondovrebbe essere nel tuo file ~ ..inputrc.
Chris

49

Apri un terminale e digita il comando seguente:

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

Inserire la password. Riavvia terminale.

Se in alcuni casi si desidera rimuovere la distinzione tra maiuscole e minuscole, è sufficiente modificare il file / etc / inputrc rimuovendo la set completion-ignore-caseriga.

È tutto.


OK, l'ho chiarito per te. Ci vuole un po 'di tempo per conoscere bash, ma continua a esplorare, leggere e chiedere. linuxcommand.org è un inizio popolare;)
Panther

3
Nel caso in cui ci sia più di un utente, questo lo cambia per tutti, che può o meno essere il comportamento desiderato
Walter Tross,

2
di gran lunga la risposta più semplice e semplice qui
workabyte

risposta semplice e chiara
Developerium

12

So che questa domanda è molto vecchia, ma a meno che non mi manchi qualcosa penso di avere una soluzione super semplice se stai usando bash.

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

Oppure aggiungi semplicemente la riga usando il tuo editor di testo preferito. Riavvia la sessione di bash e divertiti.


2
Bene, ti stai perdendo qualcosa: ~/.inputrcviene letto da readline, che è ciò che Bash usa per fornire questo completamento. Readline è utilizzato anche da altri programmi, quindi, per l'impostazione generale, ~/.inputrccome suggerito, la risposta accettata sarebbe migliore.
Muru,

Grazie per il tuo suggerimento, mi insegna un po 'di più, ma devo dire che non sembra più semplice di quello che ho accettato, che utilizza solo una riga aggiuntiva per garantire che il nuovo file non annulli il vecchio.
mwfearnley,

Perfetto. bene l'unica cosa da ricordare è che bind 'set completion-ignore-case on'dovrebbe andare in una nuova linea di.bashrc
Vishrant,

3

Puoi farlo impostando una variabile di configurazione per readline GNU, che è ciò che gestisce l'input in una shell interattiva.

La variabile necessaria è completion-ignore-casee può essere impostata direttamente nella sessione bash con:

bind "set completion-ignore-case on"

Può essere abilitato per tutte le future sessioni bash inserendolo nel ~/.inputrcfile degli utenti , o nel sistema /etc/inputrc, per abilitarlo per tutti gli utenti. Questo è il file di inizializzazione per readline.

Tuttavia, se si crea ~/.inputrc, ciò sovrascriverà la copia del sistema . (Per me questo mi ha fatto perdere alcune mappature chiave, come Ctrl-Left/ Right. Puoi vedere quali sfogliando il /etc/inputrcfile.)
Il modo per risolvere questo problema è mettere la linea $include /etc/inputrcin cima ~/.inputrc, ad esempio:

$include /etc/inputrc

set completion-ignore-case on

Per applicare le modifiche, riavviare bash o ricaricare inputrc , ad esempio con Ctrl+x, Ctrl+r.

Ulteriori informazioni su readline e inputrc sono disponibili in man bashe man 3 readline.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.