13

我需要的

一种快速/高效的方式来打开大型 ( git) 存储库(约 9.8k 文件)下的任何文件。

语境

我尝试了各种解决方案,例如Textmate.elfind-file-in-repository. 我通过以前的 SO 问题(例如thisthis )以及LocateFilesAnywhere EmacsWiki找到了这些解决方案。

虽然这两种解决方案都适用于中小型存储库,但在这种情况下它们实际上是不可用的。当我开始输入文件名时,会延迟几秒钟才能看到任何结果。并且更改搜索的任何部分也非常滞后。

我认为主要问题是在输入任何字符时,emacs/会find-file-in-repository启动一个 shell 命令 ( git ls-files...)。我真的只需要在我停止打字时这样做。

问题

  • 这个用例有更好的库吗?
  • 如果没有,我在输入时如何在命令中引入延迟?即,当我在时find-file-in-repository,我希望仅在我停止输入时才调用 find-command(假设间隔为 300 毫秒)。
4

4 回答 4

18

概括

在收到三个答案后,我尝试了它们(也回答了我自己的问题,因为上述解决方案都不适合我)。我终于安顿下来了helm-ls-git。以下是我个人观点的比较:

弹丸

  • 花了大约 30 分钟来索引回购。由于 projectile 不知道.gitignore,实际文件数更像是 52k。
  • 可以定制,但可以使用的东西(即理解 git)更可取
  • 可能需要不时使缓存重新索引无效。这将是昂贵且频繁的,因为每天都会将新文件添加到存储库中。

掌舵-cmd-t

GNU 全球

  • 没有尝试,因为它可能有与 Projectile 相同的问题(git 不知道,需要它自己的“索引”,可能需要不时维护)

然而event-jr答案开辟了更多选择:我helm直到现在才知道。查看melpa的 helm 相关插件,我发现以下内容:

helm-git

  • 这看起来很有希望
  • package.el由于它在 melpa 中,因此易于安装
  • 我也使用和喜欢magit- 所以这看起来很合适。
  • 但是,它一直因magit-git-dir: symbol is void某种错误而失败。没有深入研究,但看起来需要更新。打开了一个问题

helm-ls-git

  • 正如自述文件所说,这是独立于 magit 的。
  • 到目前为止一直工作得很好。易于安装(melpa)并且速度很快。
于 2013-01-16T06:34:50.377 回答
2

我为此使用 GNU global。我的项目中有大约 20K 文件。您可以运行 M-x gtags-find-file 并键入前几个字符。TAB 将完成并显示所有匹配项。您可以键入作为文件名一部分的任何字符,然后按 Enter。将显示包含这些字符的所有文件。

我试图为此使用弹丸。但是对于“项目索引”来说太慢了。即使在 1.5 小时后它也没有完成索引,我必须杀死它!不确定这里有什么问题。GNU global 速度更快,并在 15 分钟内完成整个标签的创建。

于 2013-01-15T06:48:42.190 回答
1

helm-cmd-t愉快地使用。它将文件列表缓存在内存中。缓存控件足够灵活,可以满足我的需要。

我刚刚在这里回答了您关于新回购地址的问题:

https://stackoverflow.com/a/8025310/903943

这是 https://github.com/lewang/helm-cmd-t

于 2013-01-14T07:03:58.833 回答
1

您可以查看Projectile。它基本上是为了提供类似于 的东西而创建的C-p,但也有很多额外的项目级功能。在如此大的项目上,第一次项目索引会相当慢,但之后 Projectile 将缓存项目文件(在内存和硬盘上),随后的 projectile 调用应该几乎是瞬时的。

Projectile 还有一个 Helm 插件,可以使用 Helm 显示项目文件和缓冲区。

于 2013-01-14T07:25:53.280 回答