Mettre à jour dynamiquement la liste d'achèvement dans zsh

13

Je trouve les listes de résultats de zsh pour l' Tabachèvement très utiles, mais je voudrais modifier un peu leur comportement:

Ils devraient apparaître lorsque je Tabpour la première fois et ensuite mettre à jour dynamiquement avec chaque nouvelle lettre ajoutée. Le comportement par défaut est que les suggestions ne sont réévaluées que lorsque vous Tabrecommencez, je souhaite enregistrer cette pression de touche répétée. ( Mise à jour: mais ne répertoriez que les achèvements possibles, il ne devrait pas modifier automatiquement ma ligne d'invite actuelle même s'il ne reste qu'une seule option.)

Existe-t-il un moyen d'obtenir un tel comportement?

F30
la source
Vous pouvez approfondir zshle comportement de personnalisation . Que doit-il se passer exactement? Pour le moment, cette question se lit comme si vous vouliez que les choix soient répertoriés pour chaque pression de touche après la tabulation initiale, mais cela ne compléterait rien. Chaque pression sur une touche doit-elle se comporter comme si elle était suivie d'un TAB? Gardez à l'esprit que cela signifierait un peu de retour en arrière pour les achèvements involontaires.
Peth
@ user112553 La première option: En ce sens, elle ne devrait pas réellement se comporter comme un TAB répété. Je veux juste que la liste de suggestions s'ajuste dynamiquement.
F30

Réponses:

2

Une façon qui pourrait offrir la solution que vous souhaitez est incremental-complete-word:

zle -N incremental-complete-word
bindkey '^Xi' incremental-complete-word

Cela charge la fonction et la lie à Ctrl- X i. Vous pouvez maintenant l'essayer:

> k^Xi
incremental (complete): -no prefix-

Dans cet exemple, la lettre a kété tapée, suivie de Control-X i.

> kil
incremental (complete): kill       

J'ai tapé ilet maintenant il y avait une complétion possible ( kill). On pourrait accepter cela et appuyer sur Entrée.

> kill^D
incremental (complete): -no prefix-
- external command -
kill      killall   killall5

En tapant Ctrl- Dle zsh affiche les complétions possibles.

De zshcontrib(1):

incremental-complete-word
Ceci permet l'achèvement incrémentiel d'un mot. Après avoir démarré cette commande, une liste de choix d'achèvement peut être affichée après chaque caractère que vous tapez, que vous pouvez supprimer avec ^Hou DEL. En appuyant sur retour, vous acceptez la fin jusqu'à présent et vous retournez à l'édition normale (c'est-à-dire que la ligne de commande n'est pas immédiatement exécutée). Vous pouvez appuyer sur TABpour terminer normalement, ^G pour revenir à l'état lorsque vous avez commencé et ^Dpour répertorier les correspondances.

qbi
la source