【问题标题】:How do I find-file recursively in directories如何在目录中递归查找文件
【发布时间】:2013-09-26 23:08:27
【问题描述】:

通常,我知道文件名但不记得或发现指定确切的目录很麻烦。我希望能够做到:

find-file x/y/*/some_file.txt

* 允许在 递归 目录中搜索,而不仅仅是当前目录。

【问题讨论】:

  • 这种路径的扩展有两个潜在的危险:可能有不止一个有效的扩展,可能有太多的路径要尝试(特别是如果有一个目录循环),所以,你可能会只需要使用find-name-dired 之类的东西。
  • 如果您使用 helm,helm-find 非常棒。如果您安装了 helm-gtags,helm-gtags-find-file 会更好。

标签: emacs


【解决方案1】:

here所述:

M-x find-name-dired

在您提供目录和模式后,匹配的文件将显示在 Dired 缓冲区中。您可以浏览文件列表(C-nC-p 等)并根据需要打开文件(Ret)。

【讨论】:

  • 这个命令似乎使用 bash .. 所以它在 Windows 上不起作用,例如 :(
【解决方案2】:

我一直在寻找该功能,现在我对我的发现感到满意:我正在使用helm-projectile

Projectile是一个项目交互库。项目是 VCS 目录或包含 .projectile 文件的目录。它基于 GNU find(但也提供了纯 emacs lisp 实现)

https://github.com/bbatsov/projectile

(您可以使用packages.el 安装它)。您可以单独使用它:致电projectile-find-file(或projectile-mode 和C-c p f)。它默认使用ido来完成,但在这种情况下我更喜欢helm-projectile的接口。

由于该功能,我的同事一直告诉我使用 Sublime Text。幸运的是,我找到了弹丸 :)

【讨论】:

  • 弹丸很棒。它易于使用且直接。
  • 我在projectile 中没有找到的是找到几个文件并在它们之间切换的能力。例如。如果您想检查项目中的所有.gitignore 文件。但是,一个不错的包。
【解决方案3】:

ido-find-file 这样做:当您输入的文件名不匹配时 当前目录中的任何内容,它使用类似 locate 的内容来匹配 您针对系统上的所有文件编写的内容。

设置只有一行:

(ido-mode)

之后,C-x C-f 将调用ido-find-file。 另外,我通常会添加:

(setq ido-enable-flex-matching t)

因为我喜欢它,但有了它你会locate 更多结果, 即foo 也将匹配froo

【讨论】:

  • 这不会递归地找到。它只在当前目录中进行模糊搜索! flplr 更好
【解决方案4】:

如果你有 helm,你可以使用这个:

(defun my/helm-find-file-recursively ()
   "Recursively find files in glob manner, in the specified directory."
   (interactive)
   (helm-find 'ask-for-dir))

(global-set-key (kbd "C-c o f") 'my/helm-find-file-recursively)

【讨论】:

    【解决方案5】:

    对于项目目录中的文件,我使用了Fiplr,它使用了同一作者的模糊搜索库。

    https://github.com/d11wtq/fiplr

    这可从 MELPA 获得。

    我没有尝试过的其他解决方案是https://github.com/technomancy/find-file-in-project

    【讨论】:

    • 这是轻量级的,可以达到目的。
    【解决方案6】:

    编辑:我发现projectile 更好,请参阅我的其他答案。

    有 find-recursive.el :http://www.webweavertech.com/ovidiu/emacs/find-recursive.txt

    下载它,把它放在你的加载路径中并在你的 .emacs 中使用它:(它不能通过 ELPA 或 el-get 获得)

    (require 'find-recursive)      
    

    现在当你调用 M-x find-recursive 时,它​​会要求一个文件名来递归搜索,一个基本目录,然后你必须在结果列表中选择一个文件。不幸的是,它没有集成到 ido 中,但我喜欢它,它有时很有用。

    【讨论】:

      【解决方案7】:

      这是一个解决方案,可让您选择性地搜索文件和子​​目录。要使用它,您需要 Dired+Icicles

      仅在 Dired 中使用的命令是 icicle-visit-marked-file-of-content-recursive(或它的 -other-window 版本)。它绑定到M-+ C-F(对于其他窗口,使用M-+ C-O——是的,它们是大写的FO)。

      它的作用:

      • 它提供当前 Dired 目录中标记的所有文件,以及任何 标记的子目录中所有具有 Dired 的文件,作为完成的候选缓冲区,以此类推。

      • 您可以访问与您的小缓冲区输入匹配的任意数量的此类候选者,包括所有这些候选者。您可以访问一些与 minibuffer 输入模式匹配的模式,然后更改模式以匹配并访问其他模式——所有这些都在同一个命令调用中。

      • "Matching" your input can mean either or both:

        • 匹配文件名称
        • 匹配文件内容

        也就是说,您的输入可以是两部分(通过点击C-M-j 分隔:文件名部分和文件内容部分。通过匹配文件名缩小选择范围,并通过匹配这些文件中的文本进一步缩小范围. 这个搜索很快——只要在文件中找到一个匹配项就会成功。

        您可以省略任何一部分:仅匹配文件名(快速)或仅匹配文件内容(自然较慢)。

      • 您可以组合输入模式 -- progressive completion。以增量方式和交互方式添加额外的模式进行匹配比尝试提出一个满足您需求的正则表达式要容易得多。

      • 每个输入模式(两部分模式的每个部分)都可以是一个正则表达式。也可以进行模糊匹配。

      • 您也可以在 Dired 缓冲区中插入子目录,而不是将它们作为单独的 Dired 缓冲区。在 Dired 缓冲区中标记的任何文件和子目录都以相同的方式处理。

        如果您不想进入已标记的子目录,可以使用命令的非递归版本 icicle-visit-marked-file-of-content,绑定到 C-FC-O 用于其他窗口)。

      如果您还使用Bookmark+,那么您可以为 Dired 缓冲区或一组 Dired 缓冲区添加书签。书签记录了标记了哪些文件和子目录,插入了哪些子目录,省略了哪些文件和子目录。跳转到这样的书签可以恢复所有这些内容。这为您提供了一种对项目进行快照的方法,然后您可以使用 M-+ C-F 等进行搜索。

      【讨论】:

        【解决方案8】:

        列出了很多选项,我正在使用下一个命令:

        find-file-in-current-directory
        

        你可以像这样把它放在你的 .emacs 中:

        ;; Find file in current directory:
        (global-set-key (kbd "C-M-,") 'find-file-in-current-directory)
        

        界面对于使用 fsf 工具的人来说非常熟悉 (https://github.com/junegunn/fzf)

        【讨论】:

          【解决方案9】:

          Icicles 命令icicle-locate(或icicle-locate-file,如果您的操作系统没有locate 程序)就是为此而生的。 Locate a file anywhere under a given directory(包括~HOME或根目录)。

          您可以匹配绝对文件名的任何部分(即路径和文件名)。您可以使用多种匹配,包括正则表达式、子字符串和模糊匹配。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-07-19
            • 1970-01-01
            • 2017-09-12
            • 2010-10-24
            • 1970-01-01
            • 1970-01-01
            • 2012-03-12
            • 1970-01-01
            相关资源
            最近更新 更多