Я использую снаряд для просмотра проекта. Я видел, что это действительно медленно, поэтому я включил кеширование. Теперь это быстро (не слишком быстро, к сожалению).
Если я создаю новый файл вне самого emacs, снаряд не находит его. Я могу запустить аннулирование кэша, но это занимает несколько минут. Как это исправить?
projectile
project
lukas.pukenis
источник
источник
M-x
projectile-cache-current-file
. Если вы не хотите, то Emacs должен пройтись по всему дереву в поисках файлов, поэтому никакие оптимизации не могут быть сделаны.filenotify.el
библиотеки, которая, как я полагаю, позволила бы снаряду отслеживать изменения каталога и, следовательно, получать информацию о создании (или удалении) нового файла (или каталога для отслеживания), чтобы он мог автоматически добавлять (или удалить) файлы в / из кэша. Уведомления о каталогах не являются рекурсивными, поэтому эта функция предполагает независимое отслеживание каждого каталога в проекте. Я не знаю, повлечет ли это какие-либо заметные штрафы за большое дерево проекта.Ответы:
Используйте префиксный аргумент, то есть, C-u C-c p fчтобы быстро сделать недействительными и найти файлы в проекте. Предложение в комментарии об использовании
projectile-cache-current-file
является технически правильным, но есть ловушка,find-file
которая автоматически вызывает это при каждом открытии нового файла. Это будет самое быстрое решение без аннулирования существующего кэша.Тем не менее, похоже, что настоящая проблема в том, что перестроение кэша путем обхода дерева занимает слишком много времени. Для этого было бы полезно, если бы было немного больше информации о вашей среде. По умолчанию
projectile-indexing-method
в'native
Windows установлено значение, которое предпочитает реализацию elisp,find
поскольку оно более переносимо. В противном случае он использует'alien
метод, то естьgit ls
,find
и т.д. Если вы находитесь на Linux метод чужд включен по умолчанию , хотя.В противном случае вы можете выследить кроличью нору
projectile-get-repo-files
иprojectile-get-ext-command
. Они указывают, где снаряд ищет список файлов. Возможно, вы могли бы переопределить это с помощью dir-locals или подобного, чтобы ускорить поиск.источник
Это не ускоряет кеширование файла, но избавляет от необходимости вручную делать недействительным устаревший кеш (который не содержит новый файл).
Снаряд автоматически делает недействительным кеш, если
/your/projectile/project/root/.projectile
файл новее, чем файл кеша проекта.Эта проверка выполняется всякий раз, когда вы пытаетесь найти какой-либо файл в проекте с использованием снаряда;
projectile-find-file
илиC-c p f
если одна из команд, которая делает это, сначала проверяет.- Из
projectile.el
источника - строки 575-579Таким образом, решение заключается
touch
в.projectile
файле при обновлении проекта. Например, вы можете , и т.д. , чтобы сделатьalias
git commit
git pull
после всего, что вы делали с
git
командами.Поэтому, если кто-то в вашей команде добавляет новый файл в проект и (при условии, что вы используете git для контроля версий), вы используете специальное псевдоним git pull, кеш будет автоматически аннулирован, когда вы сделаете это
projectile-find-file
в следующий раз.источник