Comment laisser bash les caractères génériques de saisie semi-automatique?

10

Si j'ai un répertoire contenant les fichiers

foo.bar.a.cat
foo.bar.a.hat

et je tape ls f+ TABle shell bash se termine automatiquement ls foo.bar.a.. Si je tape ls *bar*+, TABje voudrais qu'il se complète automatiquement *bar*.a.. Est-ce possible?

Cela ressemble à la question

Comment activer la complétion par tabulation des caractères génériques dans bash?

mais la réponse suggérée, "cela fonctionne hors de la boîte pour moi", ne le fait pas. J'ai aussi essayé TAB TAB, sans effet. La commande `` bash --version givesGNU bash, version 4.2.37 (1) -release (x86_64-pc-linux-gnu) `.

Accroché
la source

Réponses:

14

Vous voulez soit:

insert-complétions

ALT* pour 'insérer toutes les complétions'

Avec cela, un répertoire contenant le nom de fichier «aa ab ac ad»
ls a*suivi de alt + *compléteraitls aa ab ac ad

Entrée de page de manuel sur la liaison:

insert-complétions (M- *)

Insérez toutes les finitions du texte avant le point qui auraient été générées par les possibles-finitions.

glob-expand-word

Sur certains systèmes, ce qui précède ne fonctionnera pas avec les caractères génériques, ce qui suit fonctionne pour ces systèmes pour moi:

ctrlx, *(un combo à deux temps)

Exemple: j'ai rempli un répertoire avec:

touch {a,b,c,d,e,f}{1,2,3,4,5,6,7,8,9,0}00{a,b,c,d,f,e}

J'ai ensuite ls *100*suivi par ctrl + x, *, ce qui transforme ma ligne de lecture en:

ls a100a a100b a100c a100d a100e a100f b100a b100b b100c b100d b100e b100f c100a c100b c100c c100d c100e c100f d100a d100b d100c d100d d100e d100f e100a e100b e100c e100d e100e e100f f100a f100b f100c f100d f100e f100f

Entrée de page de manuel pour la liaison:

glob-expand-word (Cx *)

Le mot avant le point est traité comme un modèle pour l'expansion du nom de chemin et la liste des noms de fichiers correspondants est insérée, remplaçant le mot. Si un argument numérique est fourni, un '*' est ajouté avant l'expansion du nom de chemin.

Page de manuel

sage
la source
Cela ne fonctionne pas (du moins pour moi). La création des fichiers touch aa ab ac adet la saisie ls asuivie de alt+*donne la liste, mais pas avec ls a*. Les caractères génériques sont le point de la question.
accroché
@Hooked Cela fonctionne pour moi GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)et GNU bash, version 4.2.0(1)-release (x86_64--netbsd)non GNU bash, version 4.2.45(2)-release (i386-apple-darwin12.2.0). Et par travaillé, je veux dire qu'il a déposé dans le texte. Va vérifier mes fichiers de conf pour voir si j'ai quelque chose en plus.
sage
C'est étrange, pourquoi une chose aussi simple changerait-elle d'une version à l'autre? Avez-vous des idées sur la façon de l'activer ou est-il intégré au moment de la compilation?
accroché
@Hooked Je suis un peu perplexe aussi ... Il échoue également sur mon Raspberry GNU bash, version 4.2.37(1)-release (arm-unknown-linux-gnueabihf)Pi (Raspbian)
sage
@Hooked Trouvé une liaison allitérative qui fonctionne sur des systèmes où le premier n'avait pas, pour moi.
sage
8

Essayez d'ajouter ceci à ~ / .inputrc:

set show-all-if-ambiguous on

show-all-if-ambiguous fait appuyer sur tab une fois (au lieu de deux) pour lister toutes les finitions. Il permet également au premier onglet d'insérer des préfixes partagés d'expressions glob.

$ touch 1.0.{1,2}
$ echo *0* # I pressed tab once here
1.0.1  1.0.2
$ echo 1.0.

glob-complete-word (\ eg) compléterait également *0(sans *à la fin) à 1.0.. Il complète également par exemple /System/Library/Launch*/*Findepour /System/Library/LaunchAgents/com.apple.Finder.plist.

Si vous souhaitez convertir *en 1.0.1 1.0.2dans l'exemple ci-dessus, utilisez soit insert-complétions (\ e *) soit glob-expand-word (\ Cx *).

Lri
la source
4

Ce problème est provoqué par des bogues dans le package "bash-complètement".

Lorsque le paquet n'est pas installé, bash effectue sa complétion par défaut, c'est un très bon moteur de complétion de nom de fichier généralisé.

Le paquet "bash-complétement" est censé regarder le reste de la ligne et être "intelligent" sur les listes qu'il génère. Cependant, il ne parvient pas à dupliquer l'extension "glob" avec succès.

Personnellement, je pense que le paquet essaie beaucoup trop fort et finit par être utilisable uniquement par "l'utilisateur commun le plus stupide".

Cependant, avant de le supprimer, vous voudrez peut-être vérifier le haut du fichier "/ usr / share / bash-complétion / bash_completion" pour des ajouts utiles à votre .bashrc pour le "réglage brut" de la complétion bash intégrée.

BTW: Il a plus d'une centaine de bogues enregistrés ... https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=bash-completion

user3710044
la source
$ sudo yum erase bash-complét #fixed the issue for me
user2449151