Wie lösche ich den Cache einer Projektildatei in Spacemacs?

33

Ich verwende spacemacsund verwende häufig die SPC p fSchlüsselbindung, um Dateien in einem projectileProjekt zu finden . Aber auch nach dem Entfernen einer Datei aus einem Git SPC p fwird mir diese gelöschte Datei angezeigt.

Ich habe versucht SPC p I, den Cache mit ungültig zu machen, aber das hat nicht funktioniert.

Wie kann das Problem behoben werden?

Daniel Wu
quelle
4
Können Sie überprüfen, ob die Bindungen korrekt sind? Was bekommst du wenn du machst C-h k SPC p l? Es sollte gebunden sein an projectile-invalidate-cache. Überprüfen Sie auch, ob M-x projectile-invalidate-cachefunktioniert.
Kaushal Modi
Ich benutze Spacemacs, es wurden einige Tastenbelegungen neu definiert.
Daniel Wu
2
Es ist in Ordnung, die Tastenzuordnung zu ändern. Ich bitte Sie zu bestätigen, ob die Tasten an den Befehl gebunden sind, den Sie für gebunden halten sollten. Hat der Mx-Ansatz trotzdem funktioniert?
Kaushal Modi
1
Dies lag daran, dass Spacemacs recentfzum Sortieren von Projektdateien verwendet. In älteren Projectile-Versionen wurde die veraltete Dateiliste von Projectile auch nach dem Löschen der Dateien wieder verwendet recentf. In späteren Versionen von Projectile werden beim Löschen des Projectile-Caches auch die recentfDateilisten bereinigt und die gelöschten Dateien entfernt. Sie sollten auf das neueste Projectile aktualisieren und es erneut versuchen.
Tu Do

Antworten:

30

Geben M-x projectile-invalidate-cacheSie Folgendes ein, und der Befehl wird mit den daneben aufgeführten Bindungen angezeigt. Für mich sagten M-m p Idie Bindungen, was richtig war und der Standard sein sollte, den ich für den heiligen Modus ( spc p Ifür den bösen Modus) vermute .

Jimmy Hoffa
quelle
Ich wünschte, es gäbe eine Möglichkeit, dies automatisch zu tun.
Lorem Ipsum Dolor
1
@LiXinyang Es gibt eine Einstellung, die Sie in Ihre Konfiguration einfügen können, um zu verhindern, dass Projektdateien zwischengespeichert werden. Es führt jedoch dazu, dass Projektvorgänge bei Projekten mit vielen Dateien verlangsamt werden. '(projectile-enable-caching nil)
Jimmy Hoffa
0

Inspiriert von der @ Xinyang Li-Frage zur Automatisierung des Cache-Invalidierungsprozesses, begann ich, die folgenden Ausschnitte zu verwenden, um den Projektil-Cache für das aktuelle Projekt zu löschen, nachdem ich zwischen Projekten gewechselt habe und den Cache aller Projekte nach der Initialisierung von Emacs geleert habe.

(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
quelle