캐싱이있는 발사체는 새로운 파일을 좋아하지 않습니다


9

프로젝트 브라우징에 발사체를 사용합니다. 나는 그것이 느리다는 것을 보았으므로 캐싱을 켰다. 이제는 빠릅니다 (매우 빠르지 않고 슬프게도 아닙니다).

emacs 자체 외부에서 새 파일을 만들면 발사체가 찾지 못합니다. 캐시 무효화를 실행할 수 있지만 몇 분이 걸립니다. 이 문제를 해결하는 방법?


을 사용하여 파일을 열고 수동으로 캐시에 추가 할 수 있습니다 M-x projectile-cache-current-file. 원하지 않는 경우 Emacs 파일을 찾기 위해 전체 트리를 통과 해야 하므로 최적화 할 수 없습니다.
PythonNut

1
내장 filenotify.el라이브러리 를 지원하기 위해 기능 요청을 여는 것이 좋습니다.이 기능 은 발사체가 디렉토리 변경 사항을 추적하고 결과적으로 새 파일 (또는 추적 디렉토리)이 자동으로 추가되도록 만들거나 삭제할 때 알려줍니다 캐시로 또는 캐시에서 파일을 제거합니다. 디렉토리 알림은 재귀 적이 지 않으므로이 기능은 프로젝트의 모든 디렉토리를 독립적으로 추적해야합니다. 그것이 큰 프로젝트 트리에 대해 눈에 띄는 처벌을 받을지 여부는 모르겠습니다.
phils

답변:


4

접두사 인수를 사용하여 C-u C-c p f프로젝트에서 파일을 빠르게 무효화하고 찾을 수 있습니다. 사용에 대한 의견의 제안 projectile-cache-current-file은 기술적으로 정확하지만 find-file열린 모든 새 파일에서 자동으로 이것을 호출 하는 후크 가 있습니다. 기존 캐시를 무효화하지 않고 가장 빠른 솔루션입니다.

그러나 실제 문제는 트리를 통과하여 캐시를 다시 작성하는 데 너무 오래 걸린다는 것 같습니다. 이를 위해 환경에 대한 정보가 조금 더 있다면 도움이 될 것입니다. 기본적 으로 Windows에서는 projectile-indexing-method설정되어 'native있으며 find이식성이 뛰어나 므로 구현 이 더 좋습니다. 그 이외의 경우는 사용 'alien방법, 즉 git ls, find외계인 방법이 있지만 기본적으로 활성화되어 리눅스 당신이있는 경우 등.

그렇지 않으면 projectile-get-repo-files및 의 토끼 구멍을 쫓아 내고 싶을 수도 있습니다 projectile-get-ext-command. 발사체가 파일 목록을 찾는 위치를 지정합니다. 더 빠른 조회 방법을 강요하기 위해 dir-locals 등으로 이것을 무시할 수 있습니다.


2

이렇게하면 파일 캐싱 속도가 빨라지지 않지만 오래된 파일 (새 파일이 포함되지 않은)을 무효화해야하는 수동 단계는 저장되지 않습니다.

Projectile은 /your/projectile/project/root/.projectile파일이 프로젝트 캐시 파일보다 최신 인 경우 자동으로 캐시를 무효화 합니다.

이 점검은 발사체를 사용하여 프로젝트에서 파일을 찾으려고 할 때마다 수행됩니다. projectile-find-file또는 C-c p f이 작업을 수행하는 명령 중 하나가 먼저 확인되는 경우.

(defun projectile-maybe-invalidate-cache (force)
  "Invalidate if FORCE or project's dirconfig newer than cache."
  (when (or force (file-newer-than-file-p (projectile-dirconfig-file)
                                           projectile-cache-file))
    (projectile-invalidate-cache nil)))

- projectile.el출처 -라인 575-579

소위 솔루션 이다 파일 때 프로젝트를 업데이트합니다. 예를 들어, 당신은 할 수 , , 등해야 할 일touch.projectilealiasgit commitgit pull

touch /your/projectile/project/root/.projectile` 

git명령으로 무엇을 하든지

따라서 팀의 누군가가 프로젝트에 새 파일을 추가하고 (git to version control을 사용한다고 가정 할 때) 특수 별칭 별칭 git pull을 사용 projectile-find-file하면 다음에 할 때 캐시가 자동으로 무효화됩니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.