¿Cómo borrar el caché del archivo de proyectil en spacemacs?

33

Estoy usando spacemacsy a menudo uso el SPC p fenlace de teclas para encontrar archivos en un projectileproyecto. Pero incluso después de eliminar un archivo de un git, SPC p fme mostrará ese archivo eliminado.

Intenté usar SPC p Ipara invalidar el caché, pero eso no funcionó.

¿Cómo resolver el problema?

Daniel Wu
fuente
44
¿Puedes verificar que los enlaces estén hechos correctamente? ¿Qué obtienes cuando lo haces C-h k SPC p l? Debería estar obligado a projectile-invalidate-cache. También verifique si M-x projectile-invalidate-cachefunciona.
Kaushal Modi
Estoy usando spacemacs, redefinió algunas asignaciones de teclas.
Daniel Wu
2
Está bien cambiar la asignación de teclas. Le pido que confirme si las teclas están vinculadas al comando que cree que debería estar vinculado. Sin embargo, ¿funcionó el uso del enfoque Mx?
Kaushal Modi
1
Fue porque Spacemacs usa recentfpara ordenar archivos de proyecto. En la versión anterior de Projectile, incluso después de eliminar los archivos, Projectile todavía reutilizaba la lista de archivos obsoletos recentf. En la versión posterior de Projectile, al borrar la caché de Projectile también se limpia la recentflista de archivos y se eliminan los archivos eliminados. Debería actualizar al último proyectil e intentar nuevamente.
Tu Do

Respuestas:

30

Escriba M-x projectile-invalidate-cachey verá el comando con los enlaces enumerados al lado. Para mí, los enlaces decían M-m p Icuál era el correcto, y debería ser el valor predeterminado que sospecho para el modo sagrado ( spc p Ipara el modo malvado).

Jimmy Hoffa
fuente
Deseo que haya una manera de hacer esto automáticamente.
Lorem Ipsum Dolor
1
@LiXinyang hay una configuración que puede poner en su configuración que dice que nunca guarde en caché los archivos de proyecto. Sin embargo, hace que las operaciones del proyecto se ralenticen en cualquier proyecto con muchos archivos. '(projectile-enable-caching nil)
Jimmy Hoffa
0

Inspirado por la pregunta de @Xinyang Li sobre la automatización del proceso de invalidación de caché, comencé a usar los fragmentos a continuación para borrar el caché de proyectiles para el proyecto actual después de cambiar entre proyectos y borrar el caché de todos los proyectos después de la inicialización de 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
fuente