Снаряд не показывает все файлы в проекте

12

После посещения файла, который является частью репозитория git, Projectile признает существование моего репозитория git как проекта, но перечисляет только один файл (текущий файл) как часть проекта. Когда я посещаю другие файлы в проекте, они становятся частью проекта по одному.

Как мне создавать проекты в Projectile, чтобы они сразу знали обо всех файлах в проекте?

Все учебники, которые я нашел до сих пор, предполагают, что вы посещаете файл в существующем проекте, и что Projectile знает, какие файлы содержит этот проект.


Обновить

Когда я настраивал Снаряд, я принял следующее предложение в документации Снаряда:

Кэширование

Поскольку индексация большого проекта не совсем быстра (особенно в Emacs Lisp), Projectile поддерживает кэширование файлов проекта. Кэширование включается по умолчанию всякий раз, когда включена собственная индексация.

Чтобы включить кэширование безоговорочно, используйте этот фрагмент кода:

(setq projectile-enable-caching t)

Поскольку я буду время от времени ориентироваться в некоторых крупных проектах, я добавил это в свой файл инициализации, надеясь, что это даст мне повышение производительности. Я не знаю, как Projectile управляет своим кэшированием, но в то время, когда я предполагал, что при первом посещении проекта будет исследовано дерево проекта, и кэш будет заполнен всеми файлами проекта. Похоже, что мое предположение было неверным.

После того, как я установил projectile-enable-cachingв nil, Снаряд был в состоянии найти все файлы в моем проекте. Благодаря ответу alexurba и последующим комментариям я смог найти проблему.

nispio
источник
Этот вопрос слишком широкий и должен быть закрыт. Это не хороший кандидат на SE. Пожалуйста, задайте конкретный вопрос об одной конкретной проблеме, с которой вы столкнулись. Предоставьте контекстную информацию по мере необходимости для конкретной проблемы.
Дрю
4
Я думаю, что это хороший вопрос, у которого слишком много предыстории. Я думаю, что если бы оно было перефокусировано на эту строку: «Как мне настроить проекты в Projectile, чтобы они сразу знали обо всех файлах в проекте»., Это было бы хорошо.
Джордон Биондо,
3
@JordonBiondo: Чем больше он сфокусирован, тем он полезнее (для SE). Конечно, можно стремиться к минимальной степени фокусировки, чтобы она не была закрытой / закрываемой. Но надо быть в состоянии сделать даже лучше, чем это. Я предполагаю, что где-то есть где-то 3 или 4 хороших вопроса, и всем было бы полезно, если бы они были заданы отдельно, целенаправленно.
Дрю
Какую платформу вы используете (Windows, Mac, Linux)? Индексация файлов проекта, по-видимому, осуществляется платформно-зависимо.
alexurba
1
Я тестирую это на Linux (RHEL 6.5), но я хотел бы иметь возможность использовать его на всех платформах.
Ниспио

Ответы:

8

После активации projectileработает "из коробки" для проектов git. Для активации включите

(projectile-global-mode)

в вашей конфигурации Emacs (или запустить projectile-mode) вручную.

Тогда projectile-find-file(связывание ключей по умолчанию C-c p f) работает точно так же find-file, но действует на все файлы в подкаталогах главного каталога проекта (где находится .gitкаталог).

Если вы хотите избежать git, вы можете создать файл .projectileв корне проекта. Это будет иметь тот же эффект и может быть использовано для игнорирования определенных файлов или каталогов (аналогично .gitignore).

Гораздо больше информации можно найти на странице проекта github (которая слишком длинная для чтения). Я особенно рекомендую прочитать разделы о Idoи helm.

Редактировать:

Проверьте значение projectile-indexing-method. В Linux это должно быть alien, а значение projectile-enable-cachingдолжно быть nil.

alexurba
источник
Это именно та часть, которая не работает для меня. Когда я запускаю projectile-find-file, в списке присутствуют только те файлы, которые я уже посетил, хотя каталог проекта содержит гораздо больше.
Ниспио
@nispio, на странице проекта упоминаются разные методы индексации и кэширования. Можете ли вы проверить значение projectile-indexing-method( C-h v projectile-indexing-method)? На Linux это должно быть alien.
alexurba
И projectile-enable-cachingдолжно быть nil.
alexurba
2
Ты нашел это. Я поставил projectile-enable-cachingв nilи начал работать , как я ожидал. Зная это, я смог установить его обратно, tа затем использовать C-u C-c p fдля аннулирования кэша, projectile-find-fileи это тоже работает. Я запутался, почему мне нужно аннулировать кэш, если проект никогда не кэшировался ранее, но я оставлю это для другого вопроса, возможно.
Ниспио
Здорово, что это работает. Хотя я не уверен, что произойдет под Windows, где «инопланетная» индексация недоступна. Но, может быть, это действительно может быть предметом второго вопроса, когда вы столкнетесь с этим.
alexurba