gpt4 book ai didi

emacs - Emacs递归项目搜索

转载 作者:行者123 更新时间:2023-12-03 12:08:28 25 4
gpt4 key购买 nike

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

有没有办法给ido一个根目录并搜索其中的所有内容?

更新:

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

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

据我了解,project-local-variables使我可以在保存在项目根目录中的.emacs-project文件中定义内容。

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

我对Emacs Lisp中的regex语法不熟悉。 ffip-regexp的默认值为:

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

我想我可以将扩展名切换到适合我的项目的扩展名。

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

(defvar ffip-find-options

“使用项目中的查找文件时,额外的选项可以传递给“查找”。

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

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

您可以共享一个示例.emacs-project文件吗?

最佳答案

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

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

以下是使它特别有前途的一点:

;; 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的 this screencast(我已经在此答案的评论中提到过)以了解为什么需要使用它。另外,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序列显示“在项目中查找文件”提示:(global-set-key (kbd "C-x C-M-f") 'find-file-in-project)
  • 在项目的根目录中创建一个名为.emacs-project的文件。至少应包含以下内容:(setl ffip-regexp ".*\\.\\(clj\\|py\\)$")。这样可以只搜索名称和cljpy中的文件;请调整正则表达式以符合您的需求。 (请注意,此正则表达式将传递给Unix find实用程序,并应使用find的首选正则表达式语法。您仍然必须像常规Emacs中一样,对regexes 中的每个反斜杠加倍;是否还要在前面加上反斜杠如果要使用它们的'magic'正则表达式,则使用parens / pipes(|)的含义取决于find的期望。上面给出的示例在Ubuntu机器上适用于我。如果有疑问,请查找有关regexes的其他信息。)(注意:本段已在上次编辑中进行了修订,以解决一些正则表达式语法困惑的问题。)
  • C-x C-M-f走了。

  • 有许多可能的自定义设置。特别是,您可以使用(setl ffip-find-options "...")将其他选项传递给Unix find命令,这是find-file-in-project.el调用的内容。

    如果事情似乎不起作用,请检查并仔细检查您的拼写-我曾经做过类似(setl ffip-regex ...)的操作(请注意变量名中没有最后的'p'),最初很困惑地发现没有找到文件。

    关于emacs - Emacs递归项目搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2375738/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com