hek*_*ran 20 emacs textmate project ido-mode
我正在从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时传递给`find'的额外选项.
使用它来排除项目的部分:\" - not -regex \\".供应商.\\ "\"")
这究竟是什么意思,我如何使用它来排除文件/目录?
你能分享一个例子.emacs-project文件吗?
Mat*_*ert 15
我使用Mx rgrep.它会自动跳过很多你不想要的东西,比如.svn目录.
Mic*_*zyk 11
(更新主要是为了包括与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.严重的是,这是一个必须有它自己的,并会改善与查找文件,在项目的经验.请参阅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文件中.还要添加以下内容以使C-x C-M-f序列显示项目中的find-file提示符:(global-set-key (kbd "C-x C-M-f") 'find-file-in-project).
创建.emacs-project项目根目录中调用的文件.它至少应该包含这样的东西:(setl ffip-regexp ".*\\.\\(clj\\|py\\)$").这将让这个唯一的文件,它们的名称和clj或py将搜索; 请调整正则表达式以满足您的需求.(请注意,这个正则表达式将被传递给Unix find实用程序,并且应该使用find首选的正则表达式语法.你仍然必须像正常情况下那样在正则表达式中加倍每个反斜杠 ;是否还必须在parens/pipes之前放入反斜杠(|)如果你想使用他们的'魔法'正则表达式意思取决于你find的期望.上面给出的例子对我来说在Ubuntu盒子上工作.如果有疑问,请查看关于正则表达式的其他信息.)(注意:这一段已被在上一次编辑中进行了修订,修复了正则表达式语法中的一些混淆.)
C-x C-M-f 远.
有许多可能的定制; 特别是,您可以使用(setl ffip-find-options "...")其他选项传递给Unix find命令,这是find-file-in-project.el引擎盖下的内容.
如果事情看起来不起作用,请检查并仔细检查你的拼写 - 我做过类似的事情(setl ffip-regex ...)(注意变量名称中缺少最后的'p')并且最初很困惑地发现没有找到任何文件.