Projectile n'affiche pas tous les fichiers du projet

12

Après avoir visité un fichier faisant partie d'un référentiel git, Projectile reconnaît l'existence de mon référentiel git en tant que projet, mais il ne répertorie qu'un seul fichier (le fichier actuel) comme faisant partie du projet. Lorsque je visite d'autres fichiers du projet, ils font partie du projet un par un.

Comment créer des projets dans Projectile afin qu'ils soient immédiatement au courant de tous les fichiers du projet?

Tous les didacticiels que j'ai trouvés jusqu'à présent supposent que vous visitez un fichier dans un projet existant et que Projectile sait quels fichiers ce projet contient.


Mise à jour

Lorsque j'ai configuré Projectile, j'ai pris la suggestion suivante dans la documentation Projectile:

Mise en cache

Étant donné que l'indexation d'un grand projet n'est pas exactement rapide (en particulier dans Emacs Lisp), Projectile prend en charge la mise en cache des fichiers du projet. La mise en cache est activée par défaut chaque fois que l'indexation native est activée.

Pour activer la mise en cache sans condition, utilisez cet extrait de code:

(setq projectile-enable-caching t)

Comme je vais occasionnellement naviguer sur de grands projets, j'ai ajouté cela à mon fichier init en espérant que cela me donnerait une amélioration des performances. Je ne sais pas comment Projectile gère sa mise en cache, mais au moment où je supposais que la première fois que je visitais un projet, l'arborescence du projet serait explorée et le cache serait rempli avec tous les fichiers du projet. Il semble que mon hypothèse était fausse.

Après avoir mis projectile-enable-cachingà nil, Projectile a pu trouver tous les fichiers dans mon projet. Grâce à la réponse d' Alexurba et aux commentaires de suivi, j'ai pu trouver le problème.

nispio
la source
Cette question est beaucoup trop large et devrait être close. Ce n'est pas un bon candidat pour SE. Veuillez poser une question spécifique sur un seul problème spécifique que vous rencontrez. Fournissez des informations contextuelles au besoin pour le problème spécifique.
attiré
4
Je pense que c'est une bonne question qui a trop de trame de fond. Je pense que s'il était recentré sur cette ligne: "Comment configurer des projets dans Projectile pour qu'ils soient immédiatement au courant de tous les fichiers du projet.", Ce serait bien.
Jordon Biondo
3
@JordonBiondo: Plus il est ciblé, plus il est utile (pour SE). Certes, on pourrait viser un degré minimal de concentration, de sorte qu'il ne soit pas fermé / refermable. Mais on devrait pouvoir faire encore mieux que ça. J'imagine qu'il y a probablement 3 ou 4 bonnes questions là-dedans, quelque part, et tout le monde y gagnerait si elles étaient posées séparément, de manière ciblée.
Drew
Quelle plateforme utilisez-vous (Windows, Mac, Linux)? L'indexation des fichiers de projet semble être mise en œuvre de manière dépendante de la plateforme.
alexurba
1
Je teste ceci sur Linux (RHEL 6.5), mais j'aimerais pouvoir l'utiliser sur toutes les plateformes.
nispio

Réponses:

8

Une fois activé, projectilefonctionne prêt à l'emploi pour les projets git. Pour activer inclure

(projectile-global-mode)

dans votre configuration Emacs (ou démarrez projectile-mode) manuellement.

Ensuite projectile-find-file(la liaison de clé par défaut est C-c p f) fonctionne comme find-file, mais agira sur tous les fichiers dans les sous-répertoires du répertoire principal du projet (où se trouve le .gitrépertoire).

Si vous voulez éviter git, vous pouvez également créer un fichier .projectileà la racine du projet. Cela aura le même effet et peut être utilisé pour ignorer certains fichiers ou répertoires (similaire à .gitignore).

Beaucoup plus d'informations peuvent être trouvées sur la page github du projet (qui est trop longue à lire non plus). Je recommande particulièrement de lire les sections sur Idoet helm.

Éditer:

Vérifiez la valeur de projectile-indexing-method. Sous Linux, cela devrait être alien, et la valeur de projectile-enable-cachingdevrait être nil.

alexurba
la source
C'est exactement la partie qui ne fonctionne pas pour moi. Lorsque je cours projectile-find-file, les seuls fichiers répertoriés sont ceux que j'ai déjà visités, même si le répertoire du projet en contient beaucoup plus.
nispio
@nispio, sur la page du projet, il mentionne différentes méthodes d'indexation et de mise en cache. Pouvez-vous vérifier la valeur de projectile-indexing-method( C-h v projectile-indexing-method)? Sur Linux, cela devrait l'être alien.
alexurba
Et projectile-enable-cachingdevrait l'être nil.
alexurba
2
Tu l'as trouvé. Je me mis projectile-enable-cachingà nilet ça a commencé à fonctionner comme je l'attendais. Sachant cela, j'ai pu le redéfinir tpuis l'utiliser C-u C-c p fpour invalider le cache projectile-find-fileet cela fonctionne également. Je ne comprends pas pourquoi j'ai besoin d'invalider le cache si le projet n'a jamais été mis en cache auparavant, mais je l'enregistrerai pour une autre question, peut-être.
nispio
Super que ça marche. Cependant, je ne sais pas ce qui se passera sous Windows où l'indexation «étrangère» n'est pas disponible. Mais peut-être que cela peut vraiment faire l'objet d'une deuxième question lorsque vous la rencontrez.
alexurba