Como limpar o cache do arquivo de projétil no spacemacs?

33

Estou usando spacemacse frequentemente uso a SPC p fligação de chave para encontrar arquivos em um projectileprojeto. Mas mesmo depois de remover um arquivo de um git, SPC p firá me mostrar esse arquivo excluído.

Tentei usar SPC p Ipara invalidar o cache, mas isso não funcionou.

Como resolver o problema?

Daniel Wu
fonte
4
Você pode verificar se as ligações foram feitas corretamente? O que você ganha quando faz C-h k SPC p l? Deve estar vinculado a projectile-invalidate-cache. Verifique também se M-x projectile-invalidate-cachefunciona.
precisa
Estou usando spacemacs, ele redefiniu alguns mapeamentos de teclas.
Daniel Wu
2
Tudo bem alterar o mapeamento de teclas. Estou pedindo para você confirmar se as chaves estão vinculadas ao comando que você acha que deveria estar vinculado. No entanto, o uso da abordagem Mx funcionou?
precisa
1
Isso porque o Spacemacs usa recentfpara classificar os arquivos do projeto. Na versão anterior do Projectile, mesmo após a exclusão dos arquivos, o Projectile ainda reutilizava a lista de arquivos desatualizados recentf. Na versão posterior do Projectile, limpar o cache do Projectile também limpa a recentflista de arquivos e remove os arquivos excluídos. Você deve atualizar para o Projectile mais recente e tentar novamente.
Tu Do

Respostas:

30

Digite M-x projectile-invalidate-cachee você verá o comando com as ligações listadas ao lado. Para mim, as ligações diziam M-m p Ique estava correto e que deveria ser o padrão que eu suspeito para o modo sagrado ( spc p Ipara o mau).

Jimmy Hoffa
fonte
Eu gostaria que houvesse uma maneira de fazer isso automaticamente.
Lorem Ipsum Dolor
1
@LiXinyang, existe uma configuração que você pode colocar na sua configuração que diz para nunca armazenar em cache os arquivos do projeto. No entanto, faz com que as operações do projeto sejam mais lentas em qualquer projeto com muitos arquivos. '(projectile-enable-caching nil)
Jimmy Hoffa
0

Inspirado pela pergunta do @Xinyang Li sobre como automatizar o processo de invalidação de cache, comecei a usar os trechos abaixo para limpar o cache do projétil do projeto atual depois de alternar entre os projetos e limpar o cache de todos os projetos após a inicialização do 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
fonte