通常,我知道文件名但不记得或发现指定确切的目录很麻烦。我希望能够做到:
find-file x/y/*/some_file.txt
where*
将允许在递归目录中搜索,而不仅仅是当前目录。
通常,我知道文件名但不记得或发现指定确切的目录很麻烦。我希望能够做到:
find-file x/y/*/some_file.txt
where*
将允许在递归目录中搜索,而不仅仅是当前目录。
我一直在寻找该功能,现在我对我的发现感到满意:我正在使用helm-projectile
.
Projectile
是一个项目交互库。项目是 VCS 目录或包含 .projectile 文件的目录。它基于 GNU find(但也提供了纯 emacs lisp 实现)
https://github.com/bbatsov/projectile
(您可以使用 安装它packages.el
)。您可以单独使用它:调用projectile-find-file
(或projectile-mode
和 Cc pf)。它ido
默认用于完成,但在这种情况下,我更喜欢helm-projectile
.
由于该功能,我的同事一直告诉我使用 Sublime Text。幸运的是,我找到了弹丸 :)
ido-find-file
这样做:当您输入的文件名与当前目录中的任何内容都不匹配时,它会使用类似locate
的内容来匹配您针对系统上所有文件编写的内容。
设置只有一行:
(ido-mode)
在此之后,C-x C-f将调用ido-find-file
. 另外,我通常会添加:
(setq ido-enable-flex-matching t)
因为我喜欢它,但有了它你会locate
得到更多的结果,即foo
也会匹配froo
。
对于项目目录中的文件,我使用了Fiplr,它使用同一作者的模糊搜索库。
https://github.com/d11wtq/fiplr
这可从 MELPA 获得。
我没有尝试过的其他解决方案是https://github.com/technomancy/find-file-in-project
编辑:我发现更好projectile
,请参阅我的其他答案。
有 find-recursive.el : http ://www.webweavertech.com/ovidiu/emacs/find-recursive.txt
下载它,把它放在你的加载路径中并在你的 .emacs 中使用它:(它不能通过 ELPA 或 el-get 获得)
(require 'find-recursive)
现在当你调用 Mx find-recursive 时,它会要求一个文件名来递归搜索,一个基本目录,然后你必须在结果列表中选择一个文件。不幸的是,它没有集成到 ido 中,但我喜欢它,它有时很有用。
这是一个解决方案,可让您选择搜索的文件和子目录。要使用它,您需要Dired+和Icicles。
该命令仅在 Dired 中使用,是icicle-visit-marked-file-of-content-recursive
(或-other-window
它的版本)。它绑定到M-+ C-F
(对于其他窗口,使用M-+ C-O
-- 是的,那些是大写F
和O
)。
它能做什么:
作为完成的候选,它提供当前 Dired 目录中标记的所有文件,加上任何具有 Dired 缓冲区的标记子目录中的所有文件,以此类推。
您可以访问与您的 minibuffer 输入匹配的任意数量的此类候选人,包括所有候选人。您可以访问一些与 minibuffer 输入模式匹配的模式,然后更改模式以匹配并访问其他模式——所有这些都在同一个命令调用中。
也就是说,您的输入可以是两部分(通过点击分隔C-M-j
:文件名部分和文件内容部分。通过匹配文件名缩小选择范围,并通过匹配这些文件中的文本进一步缩小范围。这个搜索很快 - - 只要在文件中找到一个匹配项,它就会成功。
您可以省略任何一部分:仅匹配文件名(快速)或仅匹配文件内容(自然较慢)。
您可以组合输入模式 -渐进式完成。以增量方式和交互方式添加额外的模式来匹配,比尝试提出一个可以满足您需要的正则表达式要容易得多。
每个输入模式(两部分模式的每个部分)都可以是一个正则表达式。也可以使用模糊匹配。
您也可以在 Dired 缓冲区中插入子目录,而不是将它们作为单独的 Dired 缓冲区。Dired 缓冲区中标记的任何文件和子目录都以相同的方式处理。
如果您不想下降到标记的子目录,可以使用命令的非递归版本icicle-visit-marked-file-of-content
,绑定到C-F
(C-O
对于其他窗口)。
如果您还使用Bookmark+,那么您可以为 Dired 缓冲区或一组 Dired 缓冲区添加书签。书签记录了标记了哪些文件和子目录,插入了哪些子目录,省略了哪些文件和子目录。跳转到这样的书签可以恢复所有这些内容。这为您提供了一种快照项目的方法,然后您可以使用M-+ C-F
等进行搜索。
列出了很多选项,我正在使用下一个命令:
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)
如果你有 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)
Icicles命令icicle-locate
(或者icicle-locate-file
,如果您没有locate
适用于您的操作系统的程序)就是为此而设计的。在给定目录(包括根目录)下的任意位置找到文件。~HOME
您可以匹配绝对文件名的任何部分(即路径和文件名)。您可以使用多种匹配,包括正则表达式、子字符串和模糊匹配。