Completamento della scheda senza distinzione tra maiuscole e minuscole in Bash


142

C'è un modo per rendere insensibile il caso completo della scheda Bash?

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

Sto usando Mac OS X 10.6

Risposte:


170

Aggiorna il testo /etc/inputrcper includerlo

attiva il completamento-ignore-case

Quindi utilizzare ^X ^Rper ricaricare la configurazione.


30
"pure" - /etc/inputrco ~/.inputrco un file designato da INPUTRCsono gli unici posti dove può andare. Inserirlo al prompt di Bash non funzionerà.
Dennis Williamson,

whoops! hai ragione :)
John T

10
^X ^Rper ricaricareinputrc
Grawity

14
@DennisWilliamson: puoi farlo bind "set completion-ignore-case on"dalla riga di comando; poiché, credo, solo quella sessione terminale
Clay Bridges,

1
Quindi, questo è quello che ha msysgit ma MSYS2 manca! Qui stavo cercando di trovarlo in eg / etc / profile ...
SamB

111

Ristrutturato con il senno di poi per contrastare i pro ei contro di utilizzare [.]inputrcvs. .bash_profile.
Punta del cappello a underscore_d per il suo aiuto.

Nota: la modifica della riga di comando in Bash è fornita dalla libreria Readline; personalizzarlo non è banale, ma vale la pena imparare; le sue funzionalità includono la possibilità di definire scorciatoie da tastiera personalizzate per l'inserimento di frammenti di testo predefiniti - vedi Modifica della riga di comando nel Manuale di riferimento di Bash

Per rendere persistentemente insensibile al maiuscolo / minuscolo in Bash:


Opzione A: se hai già:

  • un /etc/inputrcfile (si applica a tutto il sistema, la modifica richiede sudo)
  • e / o un ~/.inputrcfile (specifico dell'utente)

    e / o

stai pianificando di personalizzare ampiamente la libreria readline e / o vuoi rendere le personalizzazioni efficaci anche per gli script quando chiamano read -e:

Aggiungi linea

set completion-ignore-case on

in entrambi i file, a seconda che si desideri che l'impostazione sia efficace per tutti gli utenti o l' utente corrente (creare il file, se necessario).

Un comando correlato che semplifica il completamento dei nomi di file e directory è:

set show-all-if-ambiguous on

Ciò rende superfluo premere Tab due volte quando è presente più di una corrispondenza.


Opzione B: in alternativa, puoi aggiungere i comandi Readline al tuo ~/.bash_profilefile specifico dell'utente su OS X (o ~/.bashrcsu Linux), passandoli come singolo argomento al bindbuiltin :

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

Si noti che i bindcomandi in ~/.bash_profile/ ~/.bashrchanno la precedenza su comandi equivalenti in uno /etc/inputrco ~/.inputrc.

Come suggerito sopra, la configurazione di Readline definita in questo modo non avrà effetto negli script che chiamano read -eper attivare il supporto di Readline per la lettura dell'input dell'utente.


10
show-all-if-ambiguous è così bello! Mi chiedevo spesso perché mi hanno fatto fare due schede per eseguire quell'azione. migliaia di sequenze di tasti salvate nel mio futuro! Grazie!
user34112

4
Fantastico, funziona anche per i cdcomandi. Il che risolve questa domanda e mi farà risparmiare anche migliaia di tasti. :)
hoosierEE

1
Ottimo punto re show-all-if-ambiguous. Tuttavia, dal momento che dici "in alternativa", ci sono davvero dei vantaggi nel farlo tramite bind, quando i inputrcfile sembrano renderlo inutile?
underscore_d

1
@underscore_d: buona domanda; per favore vedi la mia risposta aggiornata.
mklement0

1
Figo, grazie! Su Debian 8.2 non avevo nessuno dei due inputrc, ma li ho creati ~/.inputrce aggiunti felicemente , oltre ad altre direttive davvero utili. Suppongo che stiamo supponendo che tutti i lettori sappiano che /etc/inputrc influisce su altri utenti (a meno che questi non prevalgano sulle impostazioni interessate)? Proprio mentre citiamo avvertimenti;)
underscore_d

1

Per evitare di modificare la configurazione per tutti gli utenti e per evitare le autorizzazioni di root, utilizzare quanto segue:

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

Quindi accedere nuovamente o ricaricare ~ / .inputrc

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.