Как очистить кеш файла снаряда в spacemacs?

33

Я использую spacemacsи часто использую SPC p fпривязку ключей для поиска файлов в projectileпроекте. Но даже после удаления файла из Git, SPC p fпокажет мне, что удалил файл.

Я попытался использовать, SPC p Iчтобы сделать недействительным кеш, но это не сработало.

Как решить проблему?

Даниэль Ву
источник
4
Можете ли вы проверить, что привязки сделаны правильно? Что вы получаете, когда делаете C-h k SPC p l? Это должно быть связано с projectile-invalidate-cache. Также проверьте, M-x projectile-invalidate-cacheработает ли .
Каушал Моди
Я использую spacemacs, он переопределил некоторые сопоставления клавиш.
Даниэль Ву
2
Это нормально, чтобы изменить распределение клавиш. Я прошу вас подтвердить, привязаны ли ключи к команде, которую вы считаете обязательной. Тем не менее, работал ли подход Mx?
Каушал Моди
1
Это было потому, что Spacemacs использует recentfдля сортировки файлов проекта. В старой версии Projectile даже после удаления файлов Projectile по-прежнему использовал устаревший список файлов recentf. В более поздней версии Projectile очистка кэша Projectile также очищает recentfсписок файлов и удаляет удаленные файлы. Вы должны обновить до последней версии Projectile и попробовать еще раз.
Ту До

Ответы:

30

Наберите M-x projectile-invalidate-cacheи вы увидите команду с привязками, перечисленными рядом с ней. Для меня привязки сказали, M-m p Iчто это правильно и должно быть по умолчанию, я подозреваю, для святого режима ( spc p Iдля злого режима).

Джимми Хоффа
источник
Я хотел бы, чтобы был способ сделать это автоматически.
Лорем Ипсум Долор
1
@LiXinyang есть настройка, которую вы можете добавить в конфигурацию, которая говорит, что никогда не кэшируйте файлы проекта Это, однако, приводит к замедлению работы проекта в любом проекте с большим количеством файлов. '(projectile-enable-caching nil)
Джимми Хоффа
0

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

(add-hook 'projectile-after-switch-project-hook (lambda ()
      (projectile-invalidate-cache nil)))


(add-hook 'after-init-hook (lambda ()
    (mapc (lambda (project-root)
        (remhash project-root projectile-project-type-cache)
        (remhash project-root projectile-projects-cache)
        (remhash project-root projectile-projects-cache-time)
        (when projectile-verbose
            (message "Invalidated Projectile cache for %s."
                (propertize project-root 'face 'font-lock-keyword-face)))
        (when (fboundp 'recentf-cleanup)
            (recentf-cleanup)))
        (projectile-hash-keys projectile-projects-cache))
    (projectile-serialize-cache)))
Адам Фарина
источник