Emacs递归项目搜索

我正在从TextMate切换到Emacs。 我真的很想在Emacs中使用的TextMate的一个功能是使用模糊匹配的“在项目中查找”搜索框。 Emacs有这样的ido,但ido不会通过子目录递归搜索。 它只在一个目录内搜索。

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

更新:

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

如果此消息中的任何内容听起来很明显,那是因为我已经使用了Emacs不到一个星期。 :-)

据我了解,project-local-variables让我可以在我的项目根目录下的.emacs-project文件中定义一些东西。

如何将find-file-in-project指向我的项目根目录?

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

".*.(rb|js|css|yml|yaml|rhtml|erb|html|el)"

我认为我可以将扩展名切换为适合我的项目的扩展名。

你能解释一下ffip-find-options吗? 从文件中:

(defvar ffip-find-options“”“使用find-file-in-project时传递给`find'的额外选项。

使用它来排除你的项目的一部分:“ - not -regex ”。vendor。“”“)

这是什么意思,我怎么用它来排除文件/目录?

你能分享一个例子.emacs-project文件吗?


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


查看EmacsWiki的TextMate页面。 他们提到的最有希望的事情可能是Emacs Lisp脚本,它在一些变量的引导下提供了“项目目录”下的递归搜索。 该文件以描述如何使用它的广泛评论部分开始。

什么使得它特别有前途是以下几点:

;; If `ido-mode' is enabled, the menu will use `ido-completing-read'
;; instead of `completing-read'.

注意我自己并没有使用它......尽管我现在可以尝试一下我发现它了! :-)

HTH。

(顺便说一句,该脚本是引用GitHub描述的一部分 - “Rinari不是Rails IDE(它是Rails的Emacs小模式)”。如果您正在进行Rails开发,您可能想要检查整个事情。)


在继续进行之前,请配置ido.el. 认真的说,这是一个必须具备的功能,它将改善您在find-file-in-project中的体验。 请参阅Stuart Halloway的屏幕录像(我已在此评论中提到过),了解您为何需要使用它。 此外,Stu通过以他自己的方式模拟TextMate的项目范围文件查找工具,展示了多么灵活的ido; 如果他的功能适合您的需求,请不要再阅读。

好的,下面是如何设置RINARI的find-file-in-project.el

  • 从RINARI发行版中获取find-file-in-project.elproject-local-variables.el ,并放到Emacs可以找到它们的地方(这意味着在load-path变量中的一个目录中;你可以使用(add-to-list 'load-path "/path/to/some/directory")向其添加新目录)。

  • (require 'find-file-in-project).emacs文件。 还要添加以下内容以使Cx CMf序列显示项目中的find-file-in提示: (global-set-key (kbd "Cx CMf") 'find-file-in-project)

  • 在您的项目根目录中创建一个名为.emacs-project的文件。 至少它应该包含这样的内容: (setl ffip-regexp ".*.(clj|py)$") 。 这将使得只有名称和cljpy将被搜索的文件; 请调整正则表达式以符合您的需求。 (请注意,这个正则表达式将被传递给Unix find实用程序,并且应该使用find的首选正则表达式语法,您仍然必须像Emacs中常见的那样将正则表达式中的每个反斜杠加倍 ;无论您是否需要在parens /管道( | )如果你想使用他们的'魔术'正则表达式的意义取决于你的find的期望。上面给出的例子适用于我在Ubuntu的盒子上查找正则表达式的其他信息,如有疑问。)(注意:这一段已经在上次编辑中进行了修改,以修复一些正规表达式语法的混淆。)

  • Cx CMf了。

  • 有一些可能的定制; 特别是,你可以使用(setl ffip-find-options "...")将其他选项传递给Unix find命令,这是find-file-in-project.el调用的内容。

    如果事情看起来不起作用,请检查并仔细检查拼写 - 我做了一次像(setl ffip-regex ...)一次(注意变量名中没有最后的'p'),并且最初很困惑发现没有找到文件。


    我用这个Mx rgrep。 它会自动跳过许多你不想要的东西,比如.svn目录。


    惊讶没有人提到https://github.com/defunkt/textmate.el(现在必须让它在Windows上工作...)

    链接地址: http://www.djcxy.com/p/63295.html

    上一篇: Emacs recursive project search

    下一篇: Xcode 3.1.2 locks up when loading C++ project...?