在vim中,有一个令人惊叹的插件,叫做command-t,它可以让你模糊地搜索项目中的所有文件。我们有一个相当大的rails应用程序,有大量的文件,它能够很好地处理它,而不会有任何减慢。
我尝试了一些东西(比如ffip、textmate.el的命令-t和rinari的rinari find-in-project)。UI很棒(I <3flex),但他们都有的问题是在大型项目中,性能差到无法使用的地步。
目前,我更多地使用rinaris导航命令和ido-find-file。在他们之间,这是一个有用的设置,但在项目中有一个疯狂快速的模糊查找会很好。
有谁知道比我尝试过的更有表现力的剧本吗?
发布于 2011-11-06 13:01:10
我的作品的github代表在这里:https://github.com/lewang/anything-project-files
我添加了更多的anything源代码,以便anything-project-find可以替代"C-x“。所以这个想法是当你点击"C-x“时,你是在现有的缓冲区上完成的,最近的文件通过recentf (我个人把它改成使用"session.el”来代替,但这是一个小的差异),当前目录中的文件,当前项目中的文件。我发现它很方便。
我已经用了一段时间了,但是它没有经过很好的测试,所以请报告你发现的任何错误。
发布于 2015-05-07 19:18:28
尝试使用GNU Find或BSD Find查找文件的https://github.com/redguardtoo/find-file-in-project。没有什么能比得上C的速度!
M-x find-file-in-project-by-selected是唯一需要使用的命令。
我在一些古老的上网本上测试了50000+文件,没有任何问题。
默认情况下,它使用高效的ivy-mode来过滤候选者,并使用ido-mode作为备用。我用300万个候选人测试了常春藤模式。现在您知道Emacs Lisp本身已经足够快了。
在*nix处,内核为find提供缓存,因此如果您使用相同的输入搜索文件,响应将是即时的。
此外,ivy-mode会自动将最后的搜索结果缓存到Emacs lisp变量ivy-last中,因此您可以使用M-x ivy-resume获得以前的候选结果,而不会影响Find。
您可以使用(setq my-cached-result ivy-last)将ivy-last存储到另一个变量中。然后你就可以M-x my-ivy-resume了
(defun my-ivy-resume ()
(interactive)
(let* ((ivy-last (if my-cached-result my-cached-result ivy-last))
(default-directory (ffip-get-project-root-directory)))
(ivy-resume)))通过这种方式,您可以存储最近1000个结果并重复使用它们。)
更新1:从版本6开始,ffip使用Emacs内置API completing-read而不是ivy-read。所以像ivy-resume这样的常春藤特有的特性还不能使用。您可以降级到版本5。ffip只是一个使用Emacs内置API的Emacs Lisp文件,所以很容易降级。
或者等待常春藤来解决这个问题(参见https://github.com/abo-abo/swiper/pull/2785 )
更新2:从版本6.1.1开始,我添加了命令ffip-find-files-resume。它比ivy-resume更强大。例如,它可以重播之前的任何操作。ivy-resume只能重放上一个操作。
发布于 2011-11-02 12:35:30
取决于你所说的模糊匹配是什么意思。大多数模糊匹配天生就很慢,但一些轻量级的伪模糊算法相当快。一般来说,使用正则表达式搜索可能比使用模糊匹配搜索更好。
无论如何,这个问题有两个部分:
通过项目文件和目录将项目定义为一组给定的文件和目录-- all or directories.
可以在这两个方面提供帮助:
- [Searching file content](http://www.emacswiki.org/emacs/Icicles_-_Search_Commands%2c_Overview) (and search-and-replace)
- [Locating files](http://www.emacswiki.org/emacs/Icicles_-_File-Name_Input)
https://stackoverflow.com/questions/7970537
复制相似问题