Bash autocomplete: d'abord lister les fichiers puis les parcourir


27

Est-il possible de configurer bash de telle manière que dans le premier onglet de saisie semi-automatique, il répertorie tous les fichiers possibles et sur les suivants, passe en revue les choix?

Les deux options sont faciles à faire séparément et je pourrais les lier à différentes clés, mais ce qui précède serait parfait, mais je ne trouve rien à ce sujet sur le net.


3
Cela fait un moment que je n'ai pas utilisé ZSH, mais je pense que ses fonctions de saisie semi-automatique comme celle-ci.
jordanm

1
@jordanm Eh bien semble être une option si rien d'autre ne fonctionne, mais cela impliquerait également de tout mettre à jour depuis .bashrc, etc. vers les équivalents ZSH, ce que j'aimerais bien éviter.
Voo

Réponses:


31

Cela semble proche de ce que vous voulez:

bind "TAB:menu-complete"
bind "set show-all-if-ambiguous on"

1
Presque parfait, à part le petit défaut qu'il effectue également la saisie semi-automatique sur le premier onglet, ce qui peut être un peu ennuyeux si j'essaie juste de trouver le nom exact (c'est-à-dire que je dois supprimer un peu plus de caractères si je veux changer alors), mais je suis tout à fait disposé à vivre avec ça.
Voo

1
Comment cela peut-il être facilement annulé?
dingalapadum

1
bind "TAB:complete"; bind "set show-all-if-ambiguous off"
Jim Paris

13
@Voo ajouter la troisième ligne listera bind "set menu-complete-display-prefix on"simplement les candidats sur le premier onglet sans auto-complétion.
Naitree

2
@Naitree ne peut pas assez voter pour votre suggestion. Cela fonctionne et EST donc, tellement mieux que le comportement bash par défaut. Merci.
JBeurer

1

C'est ce que j'utilise. Autant que je sache, il fait exactement ce que vous voulez.

# make tab cycle through commands after listing
bind '"\t":menu-complete'
bind "set show-all-if-ambiguous on"
bind "set completion-ignore-case on"
bind "set menu-complete-display-prefix on"

Cela fonctionne sur Mac (10.13 & 10.14) et Ubuntu (16.04 & 18.04).


0

Avez-vous réfléchi? Il a été référencé chez Superuser ...

[[ $- = *i* ]] && bind TAB:menu-complete

1
menu-completen'est que la moitié de ce que la question pose. Comme le dit la question, «[il] est facile de faire les deux options séparément» .
jw013

Oui, je sais comment changer le comportement à l'une des deux options, mais c'est la partie facile. Le vrai problème est de savoir comment combiner les deux en un.
Voo
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.