Eu uso projétil para a minha navegação no projeto. Vi que é muito lento, então ativei o cache. Agora é rápido (não muito rápido, infelizmente).
Se eu criar um novo arquivo fora do emacs, o projétil não o encontrará. Posso executar a invalidação do cache, mas isso leva alguns minutos. Como consertar isto?
projectile
project
lukas.pukenis
fonte
fonte
M-x
projectile-cache-current-file
. Se você não quiser, o Emacs deve percorrer a árvore inteira procurando arquivos, para que nenhuma otimização possa ser feita.filenotify.el
biblioteca incorporada , que acredito que permitiria ao projétil rastrear alterações de diretório e, consequentemente, ser informado quando um novo arquivo (ou diretório para rastreamento) foi criado (ou excluído) para que ele pudesse adicionar automaticamente (ou remova) os arquivos para / do cache. As notificações do diretório não são recursivas; portanto, esse recurso implicaria o rastreamento independente de todos os diretórios do projeto. Não sei se isso resultaria em penalidades perceptíveis para uma grande árvore de projeto.Respostas:
Use o argumento prefix, ou seja, C-u C-c p fpara invalidar rapidamente e encontrar arquivos no projeto. A sugestão no comentário sobre o uso
projectile-cache-current-file
é tecnicamente correta, mas existe um ganchofind-file
que chama automaticamente isso a cada novo arquivo que é aberto. Essa será a solução mais rápida sem invalidar o cache existente.No entanto, parece que o problema real é que leva muito tempo para reconstruir o cache percorrendo a árvore. Por isso, ajudaria se houvesse um pouco mais de informação sobre seu ambiente. Por padrão,
projectile-indexing-method
é definido como'native
no windows, que prefere uma implementação elispfind
, pois é mais portátil. Caso contrário, ele usa um'alien
método, ou sejagit ls
,find
etc. Se você estiver no Linux, o método alienígena é ativado por padrão.Caso contrário, você pode perseguir a toca do coelho de
projectile-get-repo-files
eprojectile-get-ext-command
. Eles especificam onde o projétil procura a lista de arquivos. É possível que você substitua isso por dir-locals ou similares para forçar um método de pesquisa mais rápido.fonte
Isso não acelera o armazenamento em cache do arquivo, mas salva a etapa manual de invalidar o cache antigo (que não contém o novo arquivo).
O projétil invalida automaticamente o cache se o
/your/projectile/project/root/.projectile
arquivo for mais novo que o arquivo de cache do projeto.Essa verificação é feita sempre que você tenta encontrar qualquer arquivo no projeto usando projétil;
projectile-find-file
ouC-c p f
se um dos comandos que fizer isso for verificado primeiro.- Da
projectile.el
fonte - linhas 575-579Portanto, a solução é
touch
o.projectile
arquivo quando você atualiza o projeto. Por exemplo, você podealias
ogit commit
,git pull
, etc fazerdepois de fazer o que você estava fazendo com os
git
comandos.Portanto, se alguém da sua equipe adicionar um novo arquivo ao projeto e (supondo que você esteja usando o git para o controle de versão) use seu pull especial do git com alias, o cache será invalidado automaticamente
projectile-find-file
na próxima vez.fonte