Par défaut, le moteur de complétion de zsh essaie seulement d'ajouter quelque chose à ce que vous tapez. Vous l'avez configuré pour essayer également d'ajouter un préfixe. Le moteur de configuration de complétion interactive simple ( compinstall
) offre ceci sous "contrôle de correspondance → complétion de sous-chaîne". Cela insère une ligne comme celle-ci dans votre .zshrc
:
zstyle ':completion:*' matcher-list '' 'l:|=* r:|=*'
Les zstyle
paramètres intégrés définissent (principalement) les paramètres d'achèvement. Le matcher-list
style d'achèvement est une liste de façons d'essayer successivement, s'arrêtant lorsqu'il y a au moins une correspondance. La chaîne vide signifie l'achèvement par défaut (suffixes uniquement). L' incantation de contrôle de correspondancel:|=* r:|=*
signifie essayer une correspondance de préfixe *
et une correspondance de suffixe *
, c'est-à-dire n'importe quel préfixe et suffixe.
Vous pouvez interdire _
complètement les préfixes commençant par . Cela permet toujours l'achèvement des mots commençant par _
et l'achèvement en ajoutant un préfixe, mais le préfixe peut ne pas commencer par _
.
zstyle ':completion:*' matcher-list '' 'l:|=[^_]* r:|=*'
Cela s'applique à toutes les finitions, pas seulement aux finitions de noms de commandes. Je ne sais pas comment restreindre cela aux noms de commandes.
Il devrait y avoir un moyen d'exclure plus précisément les noms de commande commençant par _
, mais je ne sais pas comment. Un premier départ est avec le ignored-patterns
style d'achèvement.
zstyle ':completion:*:*:-command-:*:*' ignored-patterns '_*'
Cela exclut les correspondances commençant par _
; cependant, s'il n'y a pas de correspondance, zsh réessaye sans ignorer les règles. L'avantage de cela est que si la commande a commencé avec un trait de soulignement en premier lieu, elle sera terminée lors de cette deuxième passe. La mauvaise partie est que zsh essaiera donc d'ajouter un trait de soulignement de toute façon s'il n'y a pas de correspondance, donc si vous avez vi
et view
mais pas en vim
appuyant sur Tabaprès vi
, vous proposerez vi
et view
mais pas _vim
, mais si vous tapez, la vim
complétion sera proposée _vim
.