キャッシュ付きの発射物は新しいファイルを好まない


9

私はプロジェクトの閲覧に発射物を使用しています。本当に遅いので、キャッシュをオンにしました。今では高速です(悲しいことに、非常に高速ではありません)。

emacs自体の外部で新しいファイルを作成すると、発射物はそれを見つけられません。キャッシュの無効化を実行できますが、これには数分かかります。これを修正するには?


ファイルを開いて、で手動でキャッシュに追加できますM-x projectile-cache-current-file。したくない場合は、Emacs ツリー全体を走査してファイルを探す必要があるため、最適化を行うことはできません。
PythonNut、2015

1
内蔵filenotify.elライブラリをサポートする機能リクエストを開くことをお勧めします。これにより、発射物がディレクトリの変更を追跡できるようになり、その結果、新しいファイル(または追跡用のディレクトリ)が作成(または削除)されたときに通知され、自動的に追加できるようになります。 (または削除)キャッシュとの間のファイル。ディレクトリ通知は再帰的ではないため、この機能ではプロジェクト内のすべてのディレクトリを個別に追跡する必要があります。大規模なプロジェクトツリーで顕著なペナルティが発生するかどうかはわかりません。
phils 2015

回答:


4

つまりC-u C-c p f、プロジェクト内のファイルをすばやく無効にして見つけるには、前置引数を使用します。使用に関するコメントの提案projectile-cache-current-fileは技術的には正しいfind-fileですが、開かれるすべての新しいファイルでこれを自動的に呼び出すフックがあります。これは、既存のキャッシュを無効にすることなく、最速のソリューションになります。

ただし、ツリーをたどってキャッシュを再構築するには時間がかかりすぎるというのが本当の問題のようです。これについては、環境についてもう少し情報があれば役立ちます。デフォルトでprojectile-indexing-method'nativeWindowsに設定さfindれており、より移植性の高いelisp実装が優先されます。それ以外の場合は、'alienメソッド(つまりgit lsfindなど)を使用します。Linuxを使用している場合は、デフォルトでエイリアンメソッドが有効になっています。

そうしないと、のウサギの穴を追いかけたいかもしれませんprojectile-get-repo-filesprojectile-get-ext-command。それらは、発射物がファイルのリストを探す場所を指定します。これをdir-localsなどでオーバーライドして、より高速な検索方法を強制することができます。


2

これはファイルのキャッシュを高速化しませんが、古いキャッシュ(新しいファイルを含まない)を無効にする必要がある手動のステップを節約します。

/your/projectile/project/root/.projectileファイルがプロジェクトキャッシュファイルより新しい場合、Projectileは自動的にキャッシュを無効にします。

このチェックは、発射物を使用してプロジェクト内のファイルを見つけようとするたびに行われます。projectile-find-fileまたはC-c p f、これを最初にチェックするコマンドの1つである場合。

(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.projectileファイルです。たとえば、あなたができる、などを行うにはaliasgit commitgit pull

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

gitコマンドで何をしていた後。

したがって、チームの誰かがプロジェクトに新しいファイルを追加し、(バージョン管理にgitを使用していると仮定して)特別なエイリアスのgit pullを使用するとprojectile-find-file、次回の実行時にキャッシュが自動的に無効になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.