Emacs 递归项目搜索

Emacs 递归项目搜索,emacs,project,textmate,ido-mode,Emacs,Project,Textmate,Ido Mode,我正在从TextMate切换到Emacs。我非常希望在Emacs中使用TextMate的一个特性是使用模糊匹配的“在项目中查找”搜索框。Emacs有点类似,但ido不会递归地搜索子目录。它只在一个目录中搜索 有没有办法给ido一个根目录并搜索它下面的所有内容 更新: 以下问题与MichałMarczyk答案中的find-file-in-project.el有关 如果这条消息中的任何内容听起来很明显,那是因为我使用Emacs的时间不到一周。:-) 据我所知,项目局部变量允许我在项目根目录中保留的.

我正在从TextMate切换到Emacs。我非常希望在Emacs中使用TextMate的一个特性是使用模糊匹配的“在项目中查找”搜索框。Emacs有点类似,但ido不会递归地搜索子目录。它只在一个目录中搜索

有没有办法给ido一个根目录并搜索它下面的所有内容

更新:

以下问题与MichałMarczyk答案中的find-file-in-project.el有关

如果这条消息中的任何内容听起来很明显,那是因为我使用Emacs的时间不到一周。:-)

据我所知,项目局部变量允许我在项目根目录中保留的.emacs项目文件中定义内容

如何将“在项目中查找文件”指向我的项目根目录

我不熟悉Emacs Lisp中的正则表达式语法。ffip regexp的默认值为:

".*\\.\\(rb\\|js\\|css\\|yml\\|yaml\\|rhtml\\|erb\\|html\\|el\\)"
我假设我可以将扩展切换到适合我的项目的扩展

你能解释一下ffip查找选项吗?从文件中:

(defvar ffip查找选项 "" “在项目中使用“查找文件”时传递给“查找”的额外选项

使用此选项可排除项目的某些部分:\“-not-regex\\”.vendor.\\“\”)

这到底意味着什么?如何使用它排除文件/目录

您可以共享一个示例.emacs项目文件吗?

(更新主要是为了包含实际的设置说明,以便与RINARI发行版中的下面提到的find-file-in-project.el一起使用。原始答案保持不变;新位位于第二条水平规则之后。)


请查看EmacsWiki的最新版本。他们提到的最有希望的事情可能是,它在由一些变量引导的“项目目录”下提供递归搜索。该文件以描述如何使用它的广泛注释部分开始

特别有希望的是以下几点:

;; If `ido-mode' is enabled, the menu will use `ido-completing-read'
;; instead of `completing-read'.
注意我自己没有用过。。。虽然现在我已经找到了,我很可能会尝试一下!:-)

(顺便说一句,该脚本是——引用GitHub的描述——“Rinari不是Rails IDE(它是Rails的Emacs次要模式)”。如果您正在进行任何Rails开发,您可能希望了解整个过程。)


在继续任何操作之前,请配置。说真的,它本身就是一个必备品,它将改善您在项目中查找文件的体验。请参阅Stuart Halloway(我已经在对这个答案的评论中提到过),了解为什么需要使用它。此外,斯图还以自己的方式模拟TextMate的项目范围文件查找功能,展示了ido的灵活性;如果他的功能适合你的需要,请不要再阅读

好的,下面介绍如何在project.el中设置RINARI的
查找文件:

  • 从RINARI发行版中获取并放置到Emacs可以找到它们的地方(这意味着在
    加载路径
    变量中的一个目录中;您可以使用
    (添加到列表“加载路径”//path/to/some/directory”)
    向其中添加新目录)

  • (要求在项目中查找文件)
    添加到
    .emacs
    文件中。还添加以下内容,使
    C-x C-M-f
    序列在项目提示中调出查找文件:
    (全局设置键(kbd“C-x C-M-f”)'在项目中查找文件)

  • 在项目根目录中创建一个名为
    .emacs project
    的文件。它至少应该包含以下内容:
    (setl ffip regexp.*\.\\\.(clj\\\\\\\\)$)
    。这将使得只搜索其名称和位于
    clj
    py
    中的文件;请调整正则表达式以满足您的需要。(请注意,此正则表达式将被传递到Unix
    find
    实用程序,并应使用
    find
    的首选正则表达式语法。您仍然必须像在Emacs中一样,将正则表达式中的每个反斜杠加倍;您是否还必须将反斜杠放在参数/管道之前(
    )如果你想使用他们的'magic'正则表达式,其含义取决于你的
    查找
    的期望。上面给出的示例在Ubuntu框中对我很有用。如果有疑问,请查看有关正则表达式的其他信息。)(注:在上次编辑中,这一段已经修改,以修复一些混淆的w.r.t.正则表达式语法。)

  • C-x C-M-f

  • 有许多可能的定制;特别是,您可以使用
    (setl ffip find options“…”
    将其他选项传递给Unix
    find
    命令,这是project.el中
    find file调用的


    如果出现问题,请检查并再次检查您的拼写——我曾经做过类似于
    (setl ffip regex…
    )的事情(注意变量名中没有最后的“p”),最初发现没有找到任何文件时非常困惑。

    您可以通过使用GNU Global或IDUtils获得想要的效果。它们不是特定于Emacs的,但它们具有集成该效果的Emacs脚本。(我自己也不太了解他们。)


    您也可以选择使用CEDET和EDE项目系统。EDE可能有点重,但它有一种方法可以标记一个项目的顶部。如果您还将GNU全局或IDUtils索引文件保存在项目中,EDE可以使用它在任何位置按名称查找文件,或者您可以使用“semantic symref”查找对源文件中符号的引用。CEDET位于

    我使用M-x rgrep进行此操作。它会自动跳过很多你不想要的东西,比如.svn目录。

    也可能是一种选择。但是,您需要使用
    文件缓存递归添加目录
    手动添加项目目录,该目录具有
    eproject grep
    ,这正是您想要的

    有了正确的项目定义,