Comment effacer le cache du fichier de projectile dans spacemacs?

33

J'utilise spacemacset utilise souvent la SPC p fliaison de clé pour trouver des fichiers dans un projectileprojet. Mais même après avoir supprimé un fichier d'un git, SPC p fil me montrera ce fichier supprimé.

J'ai essayé d'utiliser SPC p Ipour invalider le cache, mais cela n'a pas fonctionné.

Comment résoudre le problème?

Daniel Wu
la source
4
Pouvez-vous vérifier que les liaisons sont faites correctement? Qu'est-ce que vous obtenez quand vous faites C-h k SPC p l? Il devrait être lié à projectile-invalidate-cache. Vérifiez également si M-x projectile-invalidate-cachefonctionne.
Kaushal Modi
J'utilise spacemacs, il a redéfini certaines correspondances clés.
Daniel Wu
2
C'est bien de changer le mappage des clés. Je vous demande de confirmer si les clés sont liées à la commande qui, selon vous, devrait l'être. Néanmoins, l’approche Mx a-t-elle fonctionné?
Kaushal Modi
1
C’est parce que Spacemacs utilise recentfpour trier les fichiers de projet. Dans l'ancienne version de Projectile, même après avoir supprimé les fichiers, Projectile réutilisait toujours la liste de fichiers obsolète recentf. Dans la version ultérieure de Projectile, effacer le cache de Projectile nettoie également la recentfliste des fichiers et supprime les fichiers supprimés. Vous devez mettre à jour le dernier projectile et réessayer.
Tu Do

Réponses:

30

Tapez M-x projectile-invalidate-cacheet vous verrez la commande avec les liaisons listées à côté. Pour moi, les reliures disaient M-m p Ice qui était correct et devrait être la valeur par défaut que je soupçonne pour le mode saint ( spc p Ipour le mode diabolique).

Jimmy Hoffa
la source
Je souhaite qu'il y ait un moyen de le faire automatiquement.
Lorem Ipsum Dolor
1
@LiXinyang il y a un paramètre que vous pouvez mettre dans votre configuration qui dit de ne jamais mettre en cache les fichiers de projet. Toutefois, cela ralentit les opérations de projet sur tous les projets contenant beaucoup de fichiers. '(projectile-enable-caching nil)
Jimmy Hoffa
0

Inspiré par la question de @Xinyang Li sur l’automatisation du processus d’invalidation du cache, j’ai commencé à utiliser des extraits de code ci-dessous pour effacer le cache du projectile du projet en cours après avoir basculé d’un projet à l’autre et effacer le cache de tous les projets après l’initialisation d’emacs.

(add-hook 'projectile-after-switch-project-hook (lambda ()
      (projectile-invalidate-cache nil)))


(add-hook 'after-init-hook (lambda ()
    (mapc (lambda (project-root)
        (remhash project-root projectile-project-type-cache)
        (remhash project-root projectile-projects-cache)
        (remhash project-root projectile-projects-cache-time)
        (when projectile-verbose
            (message "Invalidated Projectile cache for %s."
                (propertize project-root 'face 'font-lock-keyword-face)))
        (when (fboundp 'recentf-cleanup)
            (recentf-cleanup)))
        (projectile-hash-keys projectile-projects-cache))
    (projectile-serialize-cache)))
Adam Faryna
la source