Recherche de complétion de type poisson dans ZSH

8

Je jouais avec des poissons et j'ai remarqué ce comportement pratique

Si je tapais wget -<tab><tab><tab>, j'étais mis dans un menu interactif. Cependant, lorsque je tapais, je cherchais les descriptions des arguments eux-mêmes. J'ai essayé cela en zsh, et taper dans ce menu ne semblait que me ramener à mon invite interactive. Existe-t-il un moyen d'obtenir des fonctionnalités similaires dans zsh?

ollien
la source
Je voulais savoir comment faire cela depuis longtemps. En ce qui concerne l'achèvement des mots clés standard (pas les options), vim le fait en vous permettant de configurer l'achèvement pour rester concentré sur le tampon de ligne, de cette façon, si la liste d'achèvement est trop longue, vous continuez simplement à taper et la liste filtre naturellement vers le bas. Mais zsh bascule immédiatement le focus sur le widget de sélection de menu
the_velour_fog
Je ne comprends pas le comportement que vous décrivez. S'agit-il de rechercher les descriptions des options plutôt que les noms des options? Ou s'agit-il de la manière de naviguer dans les choix? À quel menu faites-vous référence (zsh a beaucoup de paramètres différents pour l'achèvement)?
Gilles 'SO- arrête d'être méchant'
@ Gilles Oui, vous pouvez l'utiliser pour rechercher les descriptions des options, ou même les noms des options eux-mêmes. Le menu auquel je fais référence apparaît lorsque vous tapez une commande, un tiret, puis appuyez deux fois sur tab. Par exemple, la saisie ls -<tab><tab>me fait entrer dans un menu où je peux faire défiler vers le haut et vers le bas les différentes options. Dans le poisson, je suis capable de taper, qui va ensuite rechercher ces options et leurs descriptions. J'espère obtenir des fonctionnalités similaires dans zsh.
ollien
Je ne sais toujours pas exactement ce que tu veux dire. Est-ce l'interactivité que vous souhaitez? c'est-à-dire pouvoir choisir dans la liste avec des flèches et des options de surbrillance? Vous dites que In fish, I'm able to type, which will then search these options and their descriptions.vous pouvez "rechercher ces options et leurs descriptions" dans zsh. Par exemple, ls --h<tab>recherche les options commençant par --het répertorie quatre correspondances.
Sparhawk
Jetez un œil à cette capture d'écran . Si je tape, ls -size<tab>j'obtiens ls --block-size et ls --size comme options dans zsh. Cependant, fish me recommande --size, --tabsize, -k, -S, --block-size et --human-readable. J'espérais obtenir des fonctionnalités similaires dans zsh. Non seulement il recherche les noms des commandes, mais il recherche également les descriptions
ollien

Réponses:

1

Je pense que cela fait ce que vous voulez:

  zmodload zsh/complist
  setopt menucomplete
  zstyle ':completion:*' menu select=0 search

Cela entraînera l'affichage de la liste lorsque vous appuyez sur l'onglet, puis si vous continuez à taper, il recherchera les options disponibles, y compris les descriptions, avec une recherche incrémentielle.

Vous pouvez également être intéressé par la même configuration, mais avec interactif au lieu de rechercher. Dans ce cas, au fur et à mesure que vous tapez, les filtrations seront filtrées pour ne correspondre qu'à celles qui correspondent à ce que vous avez tapé jusqu'à présent.

Thayne
la source
Hmm ... si je tape wget -<tab>nocela ne filtre pas la liste d'achèvement. Cela continue juste de taper «non» dans le terminal après --accept-regex=, qui est la première option dans la liste d'achèvement.
ollien
1
hein, ce n'est pas ce qui m'arrive. Mais il ne correspond pas vraiment à l'option de recherche, il fait juste une recherche incrémentielle à travers les possibilités
Thayne
1

Essayez de mettre ceci dans votre .zshrcfichier:

 # load module for list-style selection
 zmodload zsh/complist

 # use the module above for autocomplete selection
 zstyle ':completion:*' menu yes select

 # now we can define keybindings for complist module
 # you want to trigger search on autocomplete items
 # so we'll bind some key to trigger history-incremental-search-forward function
 bindkey -M menuselect '?' history-incremental-search-forward

Maintenant, si vous tapez un wget -<tab>menu avec des saisies automatiques apparaît. Nous avons défini le raccourci clavier pour ce menu, donc si vous appuyez ?sur la ligne de recherche apparaît en haut des compléments:

davidsykora~%wget --referer
isearch: refe

Quelques conseils supplémentaires:

  • vous pouvez également définir bindkey -M menuselect '/' history-incremental-search-backwardpour la recherche en arrière
  • si vous appuyez ?à nouveau pendant une recherche, la sélection passera au résultat de recherche suivant. Utiliser /pour passer au résultat précédent
  • il faut beaucoup de réglages pour le faire fonctionner comme vous le souhaitez, alors jetez un œil à la complist documentation pour trouver des fonctions et des options supplémentaires
  • pour moi, c'est généralement beaucoup plus rapide d'utiliser la vi-insertfonction complist - il filtre les complétions en fonction de ce que vous tapez.
David Sýkora
la source