Cette question est assez similaire à celle-ci , mais je ne comprends pas la solution. Je connais également ce tutoriel , mais je n'arrive toujours pas à comprendre ce que je fais mal.
J'essaie de compléter automatiquement la liste des répertoires placés dans /something/
:
$ ls /something/
One Other Three
d'une manière que cela se produira:
$ hi [TAB]
One Other Three
$ hi O[TAB]
One Other
Seulement lorsque le premier mot est hi
et pas seulement à l'intérieur /something/
.
C'est ce que je fais dans .profile
:
_codeComplete()
{
local cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen `ls /something/` -- $cur) )
}
complete -F _codeComplete "hi "
bash
filenames
autocomplete
Donovan
la source
la source
complete
commande si vous ne le connaissez pas déjà et que vous recherchezautocomplete
outab-completion
... C'est le premier endroit où j'ai trouvé le nom de la commande, et ce dont j'avais besoin pour le corrigereject
lors de la mise à niveau vers Ubuntu 14.04 ($ complete -p ls
->complete -F _longopt ls
, donc le correctif étaitcomplete -F _longopt eject
Permettez-moi d'essayer d'améliorer la réponse acceptée.
La réponse d'origine échouera avec les noms de fichiers contenant des espaces. Après quelques recherches, je me rends compte que vous pouvez changer le séparateur d'entrée en fin de ligne:
faire en sorte que la fonction gère correctement les espaces.
la source
Voici une version qui non seulement gère les espaces, mais les échappe également:
(Basé sur les réponses de Dogbane et Eduardo Almeida dos Santos , mais avec échappement comme fourni par antak sur SO: /programming//a/11536437/1536933 )
la source
la source