J'utilise projectile pour la navigation de mon projet. J'ai vu que c'est vraiment lent, j'ai donc activé la mise en cache. Maintenant, c'est rapide (pas extrêmement rapide, malheureusement).
Si je crée un nouveau fichier en dehors d'emacs lui-même, le projectile ne le trouve pas. Je peux exécuter l'invalidation du cache, mais cela prend quelques minutes. Comment régler ceci?
projectile
project
lukas.pukenis
la source
la source
M-x
projectile-cache-current-file
. Si vous ne le souhaitez pas, Emacs doit parcourir toute l'arborescence à la recherche de fichiers, donc aucune optimisation ne peut être effectuée.filenotify.el
bibliothèque intégrée , ce qui, je crois, permettrait au projectile de suivre les modifications du répertoire et, par conséquent, d'être informé lorsqu'un nouveau fichier (ou répertoire pour le suivi) a été créé (ou supprimé) afin qu'il puisse automatiquement s'ajouter (ou supprimez) les fichiers vers / depuis le cache. Les notifications d'annuaire ne sont pas récursives, donc cette fonctionnalité impliquerait un suivi indépendant de chaque annuaire du projet. Je ne sais pas si cela entraînerait des pénalités notables pour un grand arbre de projet.Réponses:
Utilisez l'argument préfixe, c'est- C-u C-c p fà- dire pour invalider rapidement et rechercher des fichiers dans le projet. La suggestion dans le commentaire sur l'utilisation
projectile-cache-current-file
est techniquement correcte, mais il existe un crochetfind-file
qui l'appelle automatiquement à chaque nouveau fichier ouvert. Ce sera la solution la plus rapide sans invalider le cache existant.Cependant, il semble que le vrai problème est qu'il faut trop de temps pour reconstruire le cache en traversant l'arborescence. Pour cela, il serait utile d'avoir un peu plus d'informations sur votre environnement. Par défaut, il
projectile-indexing-method
est défini'native
sur Windows, ce qui préfère une implémentation Elispfind
car il est plus portable. Sinon, il utilise une'alien
méthode, c'est-à-diregit ls
,find
etc. Si vous êtes sous Linux, la méthode extraterrestre est cependant activée par défaut.Sinon, vous voudrez peut-être poursuivre le terrier de lapin de
projectile-get-repo-files
etprojectile-get-ext-command
. Ils spécifient où le projectile recherche la liste des fichiers. Il est possible que vous puissiez remplacer cela par dir-locals ou similaire pour forcer une méthode de recherche plus rapide.la source
Cela n'accélère pas la mise en cache des fichiers mais cela évite l'étape manuelle d'avoir à invalider le cache périmé (qui ne contient pas le nouveau fichier).
Projectile invalide automatiquement le cache si le
/your/projectile/project/root/.projectile
fichier est plus récent que le fichier de cache de projet.Cette vérification est effectuée chaque fois que vous essayez de trouver un fichier dans le projet en utilisant projectile;
projectile-find-file
ouC-c p f
si l'une des commandes qui effectue cette vérification en premier.- De la
projectile.el
source - lignes 575-579La solution est donc
touch
au.projectile
fichier lorsque vous mettez à jour le projet. Par exemple, vous pouvezalias
legit commit
,git pull
, etc à faireaprès avoir fait tout ce que vous faisiez avec les
git
commandes.Donc, si quelqu'un de votre équipe ajoute un nouveau fichier au projet et (en supposant que vous utilisez git pour contrôler la version) vous utilisez votre pull git spécial, le cache sera automatiquement invalidé
projectile-find-file
la prochaine fois.la source