Achèvement des onglets insensibles à la casse dans Bash

142

Existe-t-il un moyen de faire en sorte que Bash tab ne traite pas la casse de manière insensible?

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

J'utilise Mac OS X 10.6

Jeffrey Aylesworth
la source

Réponses:

170

Mettre à jour le texte /etc/inputrcpour l'inclure

définir la complétion ignorer cas sur

Puis utilisez ^X ^Rpour recharger la configuration.

John T
la source
30
"aussi" - /etc/inputrcou ~/.inputrcou un fichier désigné par INPUTRCsont les seuls endroits où il peut aller. Entrer cela à une invite Bash ne fonctionnera pas.
Dennis Williamson
oups! tu as raison :)
John T
10
^X ^Rpour rechargerinputrc
grawity
14
@DennisWilliamson: vous pouvez le faire bind "set completion-ignore-case on"depuis la ligne de commande; pour, je crois, cette session finale seulement
Clay Bridges
1
C'est donc ce que msysgit a mais MSYS2 manque! Ici, j'essayais de le trouver, par exemple, dans / etc / profile ...
SamB
111

Restructuré avec le recul permettant de mettre en contraste les avantages et les inconvénients de l'utilisation par [.]inputrcrapport à .bash_profile.
Astuce du chapeau à underscore_d pour son aide.

Remarque: l’ édition de ligne de commande dans Bash est fournie par la bibliothèque Readline; la personnalisation est non triviale, mais vaut la peine d'être apprise; ses fonctionnalités incluent la possibilité de définir des raccourcis clavier personnalisés pour l'insertion d'extraits de texte prédéfinis - voir Modification à la ligne de commande dans le Manuel de référence Bash

Pour rendre la complétion de tabulation insensible à la casse de manière persistante dans Bash:


Option A: Si vous avez déjà:

  • un /etc/inputrcfichier (s'applique à l'ensemble du système, une modification est nécessaire sudo)
  • et / ou un ~/.inputrcfichier (spécifique à l'utilisateur)

    et / ou

vous envisagez de personnaliser la bibliothèque readline de manière approfondie et / ou souhaitez rendre les personnalisations efficaces pour les scripts également lorsqu'ils appellent read -e:

Ajouter une ligne

set completion-ignore-case on

dans un fichier, selon que vous souhaitez ou non que le paramètre soit effectif pour tous les utilisateurs ou pour l' utilisateur actuel (créez le fichier si nécessaire).

Une commande connexe facilitant la complétion des noms de fichiers et de répertoires est la suivante:

set show-all-if-ambiguous on

Cela évite d'avoir à appuyer deux fois sur la touche Tab lorsqu'il y a plus d'une correspondance.


Option B: vous pouvez également ajouter des commandes Readline à votre ~/.bash_profilefichier spécifique à l' utilisateur sous OS X (ou ~/.bashrcLinux), en les transmettant en tant qu'argument unique à la commande bindintégrée :

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

Notez que les bindcommandes dans ~/.bash_profile/ ~/.bashrcont priorité sur les commandes équivalentes dans /etc/inputrcou ~/.inputrc.

Comme indiqué ci-dessus, la configuration de Readline définie de cette manière ne sera pas prise en compte dans les scripts appelant read -eà activer le support Readline pour la lecture des entrées utilisateur.

mklement0
la source
10
montrer-tout-si-ambigu est si gentil! Je me suis souvent demandé pourquoi ils m'avaient fait jouer deux fois pour effectuer cette action. des milliers de frappes enregistrées dans mon avenir! Merci!
user34112
4
Génial, cela fonctionne même pour les cdcommandes. Ce qui résout cette question et me sauvera des milliers de frappes aussi. :)
hoosierEE
1
Excellent point re show-all-if-ambiguous. Cependant, puisque vous dites "comme alternative", y a-t-il réellement un avantage à le faire via bind, quand les inputrcfichiers semblent rendre cela inutile?
underscore_d
1
@underscore_d: bonne question; s'il vous plaît voir ma réponse mise à jour.
mklement0
1
Cool merci! Sur Debian 8.2, je n’avais ni l’un ni l’autre inputrc, mais j’ai volontiers créé ~/.inputrcet ajouté celles-ci, ainsi que d’autres directives vraiment utiles. Je suppose que nous supposons que tous les lecteurs savent que cela /etc/inputrc affecte d'autres utilisateurs (à moins que ce dernier ne remplace les paramètres affectés)? Alors que nous mentionnons des mises en garde;)
underscore_d
1

Pour éviter de modifier la configuration pour tous les utilisateurs et pour éviter les autorisations root, utilisez les éléments suivants:

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

Puis reconnectez-vous ou rechargez ~ / .inputrc

Ankur A Sharma
la source