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.el
和project-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)$")
。 这将使得只有名称和clj
或py
将被搜索的文件; 请调整正则表达式以符合您的需求。 (请注意,这个正则表达式将被传递给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