$ PATH precedence non suivie?

Pas tout à fait sûr si cela devrait aller ici ou un autre échange de stack, mais voici:

voir la sortie suivante de mon shell:

$ echo $PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin $ which vim /usr/bin/vim $ /opt/local/bin/vim --version VIM - Vi IMproved 7.3 (2010 Aug 15, comstackd Jan 9 2013 03:19:25) MacOS X (unix) version Included patches: 1-244, 246-762 $ vim --version VIM - Vi IMproved 7.3 (2010 Aug 15, comstackd Aug 22 2012 15:36:46) Comstackd by [email protected] 

Comme vous pouvez le voir, / opt / local / bin / vim doit avoir la priorité sur le which vim défini par la définition de $ PATH, mais ce n’est pas le cas.

Quelqu’un a une idée?


Au final, j’ai remarqué que j’avais un export PATH=.... dans mon fichier .zshrc. Donc, si quelqu’un a le même problème, vérifiez d’abord cela;)

Avez-vous installé vim dans /opt/local/bin lors de cette session shell? Bash (et probablement d’autres shells) enregistre les résultats des recherches de chemin dans une table de hachage. Vous pouvez le vérifier en demandant le type vim . C’est comme ça, sauf que c’est une commande interne qui retournera les résultats de cette hashtable s’ils existent. Plus utilement, le type renvoie précisément ce qui sera exécuté par le shell.

Vous pouvez également utiliser le hash intégré pour interroger spécifiquement les recherches enregistrées. Utilisez hash -t vim pour voir ce que l’entrée est dans la table de hachage pour vim , et utilisez hash -d vim pour supprimer vim de cette hashtable, permettant ainsi au shell de le retrouver dans $PATH la prochaine fois.


Je viens de vérifier votre description d’origine et j’ai remarqué que which vim réellement /usr/bin/vim . Étant donné which ne pas utiliser la table de hachage que j’ai décrite ci-dessus, cela suggère que votre problème était différent. Peut-être que votre $PATH avait une sorte de caractère invisible dans le premier composant?