Après avoir installé un nouveau logiciel, un terminal déjà ouvert avec ZSH ne saura pas sur les nouvelles commandes et ne peut pas générer automatiquement à ceux-ci. Apparemment, ouvrir un nouveau terminal corrige le problème, mais l'index (ou tout ce que vous l'appelez) soit reconstruit de sorte que l'automobile fonctionne sur l'ancien terminal?
J'ai essayé avec compinit
mais cela n'a pas aidé. Aussi, y a-t-il un moyen qui n'est pas dépendant de la coque? C'est bien d'avoir un moyen de vérifier également la réponse (à l'exception de la désinstallation de quelque chose et de la réinstaller).
Ce que je veux dire, c'est après avoir tapé quelques caractères de nom de commande, je peux appuyer sur Tabet zsh
devrait faire le reste pour retirer le nom complet.
Pour reconstruire le cache des commandes exécutables, utilisez rehash
ou hash -rf
.
Assurez-vous que vous n'avez pas non pas défini le hash_list_all
Option (il provoque encore moins d'accès au disque, mais rend la mise à jour du cache moins souvent).
Si vous ne voulez pas avoir à taper une commande, vous pouvez dire à ZSH de ne pas faire confiance à son cache lors de la finalisation en mettant la ligne suivante dans votre ~/.zshrc
¹:
zstyle ":completion:*:commands" rehash 1
Il y a un coût de performance, mais il est négligeable sur un cadre de bureau typique aujourd'hui. (Ce n'est pas si vous avez $PATH
sur NFS, ou un système RAM-Smart.)
La commande zstyle
est documentée dans la page zshmodule
manuel. Les valeurs de styles sont documentées dans les pages zshcompsys
et zshcompwid
, ou vous pouvez lire la source (ici, de la _command_names
fonction). Si vous vouliez une documentation lisible ... si vous en trouvez quelques-uns, laissez-moi savoir!
¹ nécessite zsh≥4.3.3, merci Chris Johnsen
Si vous rencontrez des problèmes pour obtenir une "achèvement de l'argument" fonctionnant pour les nouvelles commandes, alors compintement est probablement la commande dont vous avez besoin, mais il a un mécanisme de mise en cache qui pourrait causer votre problème.
La documentation pour ma version (4.3.10) indique que compince utilise un "fichier de vidage" mis en cache, .zcompdump
, pour stocker des fonctions d'achèvement compilées pour accélérer les invocations ultérieures. Il n'invalide que le fichier de vidage lorsqu'il notine une modification du nombre de fichiers d'achèvement (fpath
éléments commençant par #compdef …
ou #autoload …
). En règle générale, l'installation de nouveaux logiciels modifierait le nombre de fichiers d'achèvement (supposant que cela a également installé ses fichiers automatiques ZSH au bon endroit), alors je m'attendrais à ce qu'une simple compinit
à travail. Si vous êtes dans une situation dans laquelle il ne fonctionne pas, vous devrez peut-être contourner ou invalider manuellement le fichier de vidage.
Pour passer à l'aide du fichier de vidage, utilisez compinit -D
; Cela n'affectera que la coque actuelle.
Pour reconstruire le fichier de vidage, supprimez-le et revenir sur compinit
:
rm -i ${ZDOTDIR:-${HOME:?No ZDOTDIR or HOME}}/.zcompdump &&
compinit
Cela affectera la coque actuelle, des coquilles existantes qui exécutent de la plaine compinit
et de futures coquilles.
J'ai constaté que lorsque vous traitez avec/développer des acheminements qui vivent dans un fichier avec un #compdef _foo foo
que je dois utiliser à chaque modification:
unfunction _foo && compinit
afin de voir la commande mise à jour foo
complétant avec les modifications mises à jour.