Il proiettile non mostra tutti i file nel progetto


12

Dopo aver visitato un file che fa parte di un repository git, Projectile riconosce l'esistenza del mio repository git come progetto, ma elenca solo un file (il file corrente) come parte del progetto. Mentre visito altri file nel progetto, diventano parte del progetto uno alla volta.

Come faccio a creare progetti in Projectile in modo che siano immediatamente a conoscenza di tutti i file nel progetto?

Tutti i tutorial che ho trovato finora presumono che tu stia visitando un file all'interno di un progetto esistente e che Projectile sappia quali file contiene quel progetto.


Aggiornare

Quando ho installato Projectile ho preso il seguente suggerimento nella documentazione di Projectile:

caching

Poiché l'indicizzazione di un grande progetto non è esattamente rapida (specialmente in Emacs Lisp), Projectile supporta la memorizzazione nella cache dei file del progetto. La memorizzazione nella cache è abilitata per impostazione predefinita ogni volta che è abilitata l'indicizzazione nativa.

Per abilitare la memorizzazione nella cache incondizionatamente, usa questo frammento di codice:

(setq projectile-enable-caching t)

Dato che occasionalmente cercherò alcuni progetti di grandi dimensioni, l'ho aggiunto al mio file init sperando che potesse darmi un incremento delle prestazioni. Non so come Projectile gestisca la sua memorizzazione nella cache, ma al momento ho pensato che la prima volta che ho visitato un progetto, l'albero del progetto sarebbe stato esplorato e la cache sarebbe stata popolata con tutti i file del progetto. Sembra che la mia ipotesi fosse sbagliata.

Dopo aver impostato projectile-enable-cachingsu nil, Projectile è stato in grado di trovare tutti i file nel mio progetto. Grazie alla risposta di alexurba e ai commenti di follow-up, sono stato in grado di trovare il problema.


Questa domanda è troppo ampia e dovrebbe essere chiusa. Non è un buon candidato per SE. Poni una domanda specifica su un singolo problema specifico che stai riscontrando. Fornire informazioni contestuali in base alle necessità per il problema specifico.
Disegnò il

4
Penso che sia una buona domanda che ha troppo retroscena. Penso che se fosse rifocalizzato su questa linea: "Come posso impostare progetti in Projectile in modo che siano immediatamente a conoscenza di tutti i file nel progetto.", Sarebbe buono.
Jordon Biondo,

3
@JordonBiondo: più è focalizzato, più è utile (per SE). Certamente si potrebbe mirare a un livello minimo di messa a fuoco, in modo che non sia chiuso / chiudibile. Ma si dovrebbe essere in grado di fare anche meglio di così. Immagino che probabilmente ci siano 3 o 4 buone domande lì dentro, da qualche parte, e tutti trarrebbero beneficio se fossero poste separatamente, in modo mirato.
Disegnò il

Quale piattaforma stai usando (Windows, Mac, Linux)? L'indicizzazione dei file di progetto sembra essere implementata in modo dipendente dalla piattaforma.
alexurba,

1
Sto testando questo su Linux (RHEL 6.5), ma vorrei poterlo utilizzare su tutte le piattaforme.
nispio,

Risposte:


8

Una volta attivato, projectilefunziona immediatamente per i progetti git. Per attivare includere

(projectile-global-mode)

nella tua configurazione di Emacs (o avvia projectile-mode) manualmente.

Quindi projectile-find-file(l'associazione chiave predefinita è C-c p f) funziona esattamente come find-file, ma agirà su tutti i file nelle sottodirectory della directory principale del progetto (dove si trova la .gitdirectory).

Se vuoi evitare git, puoi in alternativa creare un file .projectilenella radice del progetto. Ciò avrà lo stesso effetto e può essere utilizzato per ignorare determinati file o directory (simili a .gitignore).

Molte più informazioni sono disponibili nella pagina github del progetto (che è troppo lunga da leggere). Consiglio in particolare di leggere le sezioni su Idoe helm.

Modificare:

Controlla il valore di projectile-indexing-method. Su Linux questo dovrebbe essere aliene il valore di projectile-enable-cachingdovrebbe essere nil.


Questa è esattamente la parte che non funziona per me. Quando corro projectile-find-file, gli unici file elencati sono quelli che ho già visitato, anche se la directory del progetto ne contiene molti altri.
nispio,

@nispio, nella pagina del progetto menziona diversi metodi di indicizzazione e memorizzazione nella cache. Puoi controllare il valore di projectile-indexing-method( C-h v projectile-indexing-method)? Su Linux dovrebbe essere così alien.
alexurba,

E projectile-enable-cachingdovrebbe essere nil.
alexurba,

2
L'hai trovato. Ho impostato projectile-enable-cachinga niled è iniziato a lavorare come mi aspetto. Sapendo che, sono stato in grado di ripristinarlo te quindi utilizzare C-u C-c p fper invalidare la cache per projectile-find-filee che funziona anche. Sono confuso perché devo invalidare la cache se il progetto non è mai stato memorizzato nella cache prima, ma lo salverò per un'altra domanda, forse.
nispio,

Fantastico che funzioni. Tuttavia, non sono sicuro di cosa accadrà in Windows dove l'indicizzazione "aliena" non è disponibile. Ma forse questo può davvero essere oggetto di una seconda domanda quando ci si imbatte.
alexurba,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.