Puis-je rendre la saisie semi-automatique insensible à la casse dans Bash?

144

Le terminal d'Ubuntu utilise l'auto-complétion sensible à la casse, comme on pourrait s'y attendre pour Linux.

Mais je pense qu’il serait souvent plus pratique d’utiliser une solution insensible à la casse à la place, pour vous éviter de devoir être précis lors du début d’un nom, et cela vaudrait probablement la peine de vous tromper de faux positifs supplémentaires. Est-il possible de changer ce comportement?

Mwfearnley
la source
Très bonne question. En tant qu'outil de convivialité, la complétion par des tabulations ne devrait pas être aussi stricte que le système informatique en général lorsqu'il s'agit de nommer des éléments.
masterxilo

Réponses:

170

Afin de rendre la bashcasse insensible à l'utilisateur actuel:

Exécutez le script shell suivant dans un terminal:

# 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

Démarrer un nouveau shell (rouvrir le terminal).

Pour effectuer les modifications à l'échelle du système:

# 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

Pour plus de détails, voir man bash. Oui, la page est longue, mais bash est un programme assez complexe, et si vous souhaitez simplement rechercher dans cette page la mention "insensible à la casse" pour accéder à la section correspondante. Les gens apprennent généralement bash une option à la fois ou un script à la fois et il faut beaucoup de temps pour maîtriser toutes les nuances. Votre intérêt peut varier.

Panthère
la source
Merci. J'apprécie la solution conviviale spécifique à l'utilisateur / non-administrateur. La ligne d'écho semble avoir fonctionné, mais maintenant, je semble avoir perdu la possibilité d'utiliser Ctrl-Gauche / Droite pour déplacer le curseur. Aussi, serait >>plus sûr que >?
Mwfearnley
En général, >> va être plus sûr, mon erreur, je supposais que vous n'aviez pas un ~ / .inputrc. J'ai également défini noclobber =). Vous ne savez pas pourquoi vos touches de direction ne fonctionnent pas, je ne peux pas le reproduire. Vous pouvez supprimer ~ / .inputrc et démarrer un nouveau shell.
Panther
Oui, cela fonctionne à nouveau si je le supprime .. Selon linuxfromscratch.org/blfs/view/5.1/postlfs/inputrc.html, la nouvelle entréerc pourrait être supérieure à celle globale?
mwfearnley
2
Bon sang, je l'ai copié dans / etc / inputrc et je ne peux plus taper "i" et quand je tape "e", il envoie simplement "ssssssssss [..]" dans la console. Il vaut mieux utiliser la solution de @ emtin4.
Luca Steeb
2
@LucaSteeb J'ai aussi touché cela, mais je me suis rendu compte que tout ce bloc n'était pas censé être mis dans votre fichier .inputrc, mais tapé une fois. Seulement $include /etc/inputrcet set completion-ignore-case ondevrait être dans votre fichier ~ ..inputrc.
Chris
49

Ouvrez un terminal et tapez la commande ci-dessous:

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

Entrer le mot de passe. Redémarrez le terminal.

Si dans certains cas vous souhaitez supprimer la casse, éditez simplement le fichier / etc / inputrc en supprimant la set completion-ignore-caseligne.

C'est tout.

emtin4
la source
OK, j'ai clarifié cela pour vous. Il faut un peu de temps pour en savoir plus sur bash, mais continuez à explorer, à lire et à poser des questions. linuxcommand.org est un début populaire;)
Panther
3
S'il y a plus d'un utilisateur, cela change pour tous, ce qui peut ou peut ne pas être le comportement souhaité
Walter Tross le
2
de loin la réponse la plus simple et simpliste ici
workabyte
réponse simple et claire
Developerium
12

Je sais que cette question est très ancienne, mais à moins que quelque chose me manque, je pense avoir une solution très simple si vous utilisez bash.

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

Ou simplement ajouter la ligne en utilisant votre éditeur de texte préféré. Redémarrez votre session bash et profitez-en.

init3
la source
2
Eh bien, il vous manque quelque chose: ~/.inputrcest lu par readline, ce que bash utilise pour fournir cette finition. Readline est également utilisé par d’autres programmes, aussi, ~/.inputrccomme indiqué, la réponse acceptée serait préférable.
Muru
Merci pour votre suggestion, cela m’en apprend un peu plus, mais je dois dire que cela ne semble pas plus simple que celui que j’ai accepté, qui utilise simplement une ligne supplémentaire pour s’assurer que le nouveau fichier n’annule pas l’ancien.
Mwfearnley
parfait. bind 'set completion-ignore-case on'.bashrc
Eh
3

Vous pouvez le faire en définissant une variable de configuration pour GNU readline, qui gère l’entrée dans un shell interactif.

La variable nécessaire est completion-ignore-caseet peut être définie directement dans votre session bash avec:

bind "set completion-ignore-case on"

Il peut être activé pour toutes les futures sessions bash en le mettant dans le ~/.inputrcfichier de l'utilisateur , ou dans le système /etc/inputrc, pour l'activer pour tous les utilisateurs. C'est le fichier d'initialisation pour readline.

Mais notez que si vous créez ~/.inputrc, cela remplacera la copie système . (Pour moi, cela m'a fait perdre certaines correspondances clés, telles que Ctrl-Left/ Right. Vous pouvez voir lesquelles en lisant attentivement le /etc/inputrcfichier.)
Pour résoudre ce problème, placez la ligne $include /etc/inputrcen haut de la page ~/.inputrc, par exemple:

$include /etc/inputrc

set completion-ignore-case on

Pour appliquer les modifications, redémarrez bash ou recharger inputrc , par exemple avec Ctrl+x, Ctrl+r.

Plus d'informations sur readline et inputrc sont disponibles dans man bashet man 3 readline.

Mwfearnley
la source