Après avoir installé un nouveau logiciel, un terminal déjà ouvert avec zsh ne sera pas informé des nouvelles commandes et ne pourra pas générer de saisie automatique pour celles-ci. Apparemment, l’ouverture d’un nouveau terminal corrige le problème, mais l’index (ou le nom de votre choix) peut-il être reconstruit de sorte que la saisie semi-automatique fonctionne sur l’ancien terminal?
J'ai essayé avec compinit
mais ça n'a pas aidé. En outre, existe-t-il un moyen qui ne dépend pas du shell? C'est bien d'avoir un moyen de vérifier la réponse aussi (sauf pour désinstaller quelque chose et le réinstaller).
Ce que je veux dire, c'est après avoir tapé quelques caractères du nom d'une commande, je peux appuyer sur Tabet zsh
je devrais faire le reste pour extraire le nom complet.
la source
Réponses:
Pour reconstruire le cache des commandes exécutables, utilisez
rehash
ouhash -rf
.Assurez-vous de ne pas désactiver l'
hash_list_all
option (cela entraîne encore moins d'accès au disque mais rend la mise à jour du cache moins souvent).Si vous ne voulez pas avoir à taper de commande, vous pouvez dire à zsh de ne pas faire confiance à son cache lors de la finalisation en mettant la ligne suivante dans votre
~/.zshrc
¹:Il y a un coût de performance, mais il est aujourd'hui négligeable sur un environnement de bureau typique. (Ce n'est pas le cas si vous avez
$PATH
sur NFS ou un système dépourvu de RAM.)La
zstyle
commande elle-même est documentée dans lazshmodule
page de manuel. Les valeurs de styles sont documentées dans les pages de manuelzshcompsys
etzshcompwid
, ou vous pouvez lire le source (ici, de la_command_names
fonction). Si vous voulez de la documentation lisible… si vous en trouvez, faites le moi savoir!¹ nécessite zsh≥4.3.3, merci Chris Johnsen
la source
PATH="$PATH"
ferait aussi le travail.HASH_LIST_ALL
est affiché par défaut dans ma documentation.Si vous ne parvenez pas à obtenir la «complétion des arguments» pour les nouvelles commandes, compinit est probablement la commande dont vous avez besoin. Toutefois, il existe un mécanisme de mise en cache qui peut être à l'origine de votre problème.
La documentation de ma version (4.3.10) indique que compinit utilise un "fichier de vidage" mis en cache
.zcompdump
, pour stocker les fonctions de complétion compilées afin d'accélérer les appels ultérieurs. Il n'invalide le fichier de vidage que lorsqu'il constate une modification du nombre de fichiers d'achèvement (fpath
fichiers d'élément commençant par#compdef …
ou#autoload …
). L'installation d'un nouveau logiciel modifierait vraisemblablement le nombre de ces fichiers d'achèvement (en supposant que les fichiers auto-complétés zsh soient également installés au bon endroit), je m'attendrais donc à uncompinit
travail simple . Si vous êtes dans une situation où cela ne fonctionne pas, vous devrez peut-être ignorer ou invalider manuellement le fichier de vidage.Pour ignorer l’utilisation du fichier de vidage, utilisez
compinit -D
; cela n'affectera que le shell actuel.Pour reconstruire le fichier de vidage, supprimez-le et réexécutez
compinit
:Cela affectera le shell actuel, les shells existants qui fonctionnent en clair
compinit
et tous les shells futurs.la source
zim
autorisent l'utilisation de fichiers de vidage par hôte. Dans ce cas, supprimez également$zcompdump_file
avec.zcompdump
.