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

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.


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.


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.