在大型(git
)回购(〜9.8k文件)下打开任何文件的快速/高效方式。
我尝试了各种解决方案,例如Textmate.el
和find-file-in-repository
。我通过以前的SO问题找到了这些解决方案,例如this和this以及LocateFilesAnywhere EmacsWiki。
虽然两种解决方案都适用于小型到mdeium回购,但在这种情况下,它们几乎无法使用。当我开始输入文件名时,在看到任何结果之前有几秒钟的延迟。而改变搜索的任何部分也非常滞后。
我认为主要的问题是在输入任何字符时,emacs
/ find-file-in-repository
会启动一个shell命令(git ls-files...
)。当我停止输入时,我真的只需要这样做。
find-file-in-repository
时,我希望只在我停止输入时调用find-command(让我们说300ms的间隙)。答案 0 :(得分:18)
在我收到三个答案后,我尝试了它们(也回答了我自己的问题,因为上述解决方案都不适合我)。我终于安顿下来了helm-ls-git
。以下是我的观点比较:
.gitignore
,实际文件数量更像是52k。 event-jr的answer提供了更多选择:直到现在我还没有意识到helm
。查看melpa与helm相关的插件,我发现了以下内容:
helm-git
package.el
很容易安装,因为它位于melpa magit
- 所以这看起来很合适。magit-git-dir: symbol is void
类错误而失败。没有太多潜水,但看起来需要更新。已打开an issue helm-ls-git
答案 1 :(得分:2)
我为此使用GNU global。我的项目中有大约20K个文件。你可以跑
M-x gtags-find-file
并输入前几个字符。 TAB将完成并显示所有匹配项。您可以键入任何属于文件名的字符,然后按Enter键。将显示包含这些字符的所有文件。
我试图使用抛射物。但对于“项目索引”来说,这太慢了。即使1.5小时后它也没有完成索引,我必须杀掉它!不确定这里有些不对劲。 GNU global速度更快,可在15分钟内完成整个标记的创建。
答案 2 :(得分:1)
我愉快地使用helm-cmd-t
。它会将文件列表缓存在内存中。缓存控件足够灵活,可满足我的需求。
我刚才在这里回答了关于新回购地址的问题:
答案 3 :(得分:1)
您可以查看Projectile。它基本上是为了提供与C-p
类似的东西而创建的,但也有很多额外的项目级功能。在这样一个大项目中,第一次项目索引会相当慢,但之后Projectile将缓存项目文件(内存和硬盘驱动器上),随后的弹丸调用应该几乎是即时的。
Projectile还有一个Helm插件,用Helm显示项目文件和缓冲区。