Yo uso proyectil para mi proyecto de navegación. He visto que es muy lento, así que activé el almacenamiento en caché. Ahora es rápido (no tremendamente rápido, tristemente).
Si creo un nuevo archivo fuera de emacs, el proyectil no lo encuentra. Puedo ejecutar la invalidación de caché, pero eso lleva unos minutos. ¿Cómo arreglar esto?
projectile
project
lukas.pukenis
fuente
fuente
M-x
projectile-cache-current-file
. Si no desea, Emacs debe atravesar todo el árbol en busca de archivos, por lo que no se pueden realizar optimizaciones.filenotify.el
biblioteca incorporada , que creo que permitiría que el proyectil rastree los cambios del directorio y, en consecuencia, se le informe cuando se creó (o eliminó) un nuevo archivo (o directorio para el seguimiento) para que pueda agregar automáticamente (o eliminar) los archivos a / del caché. Las notificaciones de directorio no son recursivas, por lo que esta característica implicaría rastrear independientemente cada directorio en el proyecto. No sé si eso incurriría en sanciones notables para un gran árbol de proyectos.Respuestas:
Use el argumento prefijo, es decir, C-u C-c p fpara invalidar rápidamente y buscar archivos en el proyecto. La sugerencia en el comentario sobre el uso
projectile-cache-current-file
es técnicamente correcta, pero hay un enlacefind-file
que automáticamente llama a esto en cada archivo nuevo que se abre. Esa será la solución más rápida sin invalidar el caché existente.Sin embargo, parece que el problema real es que lleva demasiado tiempo reconstruir el caché atravesando el árbol. Para esto, ayudaría si hubiera un poco más de información sobre su entorno. De forma predeterminada,
projectile-indexing-method
está configurado'native
en Windows, lo que prefiere una implementación de Elisp,find
ya que es más portátil. De lo contrario, utiliza un'alien
método, es decirgit ls
,find
etc. Si está en Linux, el método alienígena está habilitado de forma predeterminada.De lo contrario, es posible que desee perseguir la madriguera del conejo de
projectile-get-repo-files
yprojectile-get-ext-command
. Especifican dónde busca el proyectil la lista de archivos. Es posible que pueda anular esto con directorios locales o similares para forzar un método de búsqueda más rápido.fuente
Esto no acelera el almacenamiento en caché del archivo, pero ahorra el paso manual de tener que invalidar el caché obsoleto (que no contiene el nuevo archivo).
El proyectil invalida automáticamente la memoria caché si el
/your/projectile/project/root/.projectile
archivo es más nuevo que el archivo de memoria caché del proyecto.Esta comprobación se realiza cada vez que intenta encontrar cualquier archivo en el proyecto usando proyectil;
projectile-find-file
oC-c p f
si uno de los comandos que hace esto verifica primero.- Desde la
projectile.el
fuente - líneas 575-579Entonces, la solución es
touch
el.projectile
archivo cuando actualiza el proyecto. Por ejemplo, puedealias
elgit commit
,git pull
, etc para hacerdespués de hacer lo que estaba haciendo con los
git
comandos.Entonces, si alguien en su equipo agrega un nuevo archivo al proyecto y (suponiendo que esté usando git para el control de versiones) use su extracción de git con alias especial, la caché se invalidará automáticamente
projectile-find-file
la próxima vez.fuente