Ich benutze Projectile für mein Projekt-Browsing. Ich habe gesehen, dass es sehr langsam ist, also habe ich das Caching aktiviert. Jetzt ist es schnell (leider nicht besonders schnell).
Wenn ich eine neue Datei außerhalb von Emacs selbst erstelle, findet Projectile sie nicht. Ich kann die Cache-Ungültigmachung ausführen, aber das dauert einige Minuten. Wie kann ich das beheben?
projectile
project
lukas.pukenis
quelle
quelle
M-x
projectile-cache-current-file
. Wenn Sie dies nicht möchten, muss Emacs den gesamten Baum nach Dateien durchsuchen, damit keine Optimierungen vorgenommen werden können.filenotify.el
Bibliothek zu öffnen , die es Projectile meiner Meinung nach ermöglichen würde, Verzeichnisänderungen zu verfolgen und folglich informiert zu werden, wenn eine neue Datei (oder ein neues Verzeichnis zur Verfolgung) erstellt (oder gelöscht) wurde, damit sie automatisch hinzugefügt werden kann (oder entfernen) Sie die Dateien in / aus dem Cache. Verzeichnisbenachrichtigungen sind nicht rekursiv, daher würde diese Funktion die unabhängige Verfolgung jedes Verzeichnisses im Projekt beinhalten. Ich weiß nicht, ob dies für einen großen Projektbaum spürbare Strafen nach sich ziehen würde.Antworten:
Verwenden Sie das Präfix-Argument, C-u C-c p fum Dateien im Projekt schnell ungültig zu machen und zu finden. Der Vorschlag im Kommentar zur Verwendung
projectile-cache-current-file
ist technisch korrekt, aber es gibt einen Hookfind-file
, der dies automatisch bei jeder neuen Datei aufruft, die geöffnet wird. Dies ist die schnellste Lösung, ohne den vorhandenen Cache ungültig zu machen.Es hört sich jedoch so an, als ob das eigentliche Problem darin besteht, dass es zu lange dauert, den Cache durch Durchlaufen des Baums neu zu erstellen. Hierfür wäre es hilfreich, wenn Sie ein wenig mehr Informationen über Ihre Umgebung hätten. Standardmäßig
projectile-indexing-method
ist'native
Windows aktiviert, was eine einfache Implementierung bevorzugt,find
da es portabler ist. Andernfalls verwendet es ein'alien
Verfahren, das heißtgit ls
,find
usw. Wenn Sie sind Linux die fremde Methode standardmäßig obwohl aktiviert ist.Andernfalls möchten Sie vielleicht das Kaninchenloch von
projectile-get-repo-files
und jagenprojectile-get-ext-command
. Sie geben an, wo das Projektil nach der Liste der Dateien sucht. Es ist möglich, dass Sie dies mit Dir-Einheimischen oder Ähnlichem überschreiben, um eine schnellere Suchmethode zu erzwingen.quelle
Dies beschleunigt das Zwischenspeichern von Dateien nicht, erspart jedoch den manuellen Schritt, den veralteten Cache (der die neue Datei nicht enthält) ungültig zu machen.
Projectile macht den Cache automatisch ungültig, wenn die
/your/projectile/project/root/.projectile
Datei neuer als die Projekt-Cache-Datei ist.Diese Überprüfung wird immer dann durchgeführt, wenn Sie versuchen, mithilfe von projectile eine Datei im Projekt zu finden.
projectile-find-file
oderC-c p f
wenn einer der Befehle, der dies ausführt, zuerst prüft.- Von der
projectile.el
Quelle - Linien 575-579Die Lösung liegt also in
touch
der.projectile
Datei, wenn Sie das Projekt aktualisieren. Zum Beispiel können Siealias
dasgit commit
,git pull
usw. zu tunnachdem Sie alles getan haben, was Sie mit den
git
Befehlen getan haben .Wenn also jemand in Ihrem Team dem Projekt eine neue Datei hinzufügt und (vorausgesetzt, Sie verwenden Git zur Versionskontrolle) Ihren speziellen Alias-Git-Pull verwendet, wird der Cache
projectile-find-file
beim nächsten Mal automatisch ungültig .quelle