emacs - 如何在子目录中进行查找文件搜索

时间:2011-08-09 11:17:20

标签: emacs icicles

我想为Emacs实现像Resharper的“Go To File”功能。当按下提到的快捷方式时,Resharper弹出一个接受通配符字符串的文本框,并显示一个自动完成菜单,列出项目中与该通配符匹配的所有文件:

"Go To File" dialog http://www.jetbrains.com/resharper/features/screenshots/50/navigation_gotofile.png

现在,我知道一种粗略的方式来实现或多或少等同的东西。它涉及使用dired运行-lR然后调用dired-isearch-filenames - 这将开始对某些根目录中的整个文件层次结构进行增量搜索。

UPD。我也知道打开缓冲区的选项,将它们全部保存在内存中并使用switch-to-buffer。此解决方案可以很好地与ido一起使用,但它不是100%防弹(如果某些文件被添加或删除会怎么样?)。它也不能与tabbar一起使用,因为选项卡将显示项目中包含的所有文件,但不会显示代表我当前上下文的项目的子集。

然而,这显示了许多不必要的信息,并且缺乏自动完成功能。我已经看了idoicicles,但它们似乎只能在当前目录中浅薄地工作。是否有Emacs插件可以帮助我实现目标?

4 个答案:

答案 0 :(得分:5)

虽然您可能不希望打开大量缓冲区,但您可以将IDO挂钩到跟踪最近打开的文件的recentf

(recentf-mode 1)
(setq recentf-max-saved-items 300)

(defun ido-choose-from-recentf ()
  "Use ido to select a recently opened file from the `recentf-list'"
  (interactive)
  (find-file (ido-completing-read "Open file: " recentf-list nil t)))

(global-set-key [(meta f11)] 'ido-choose-from-recentf)

我多年来一直在使用这个技巧,这是我需要的所有文件切换的99%。

除此之外,我使用M-x rgrep,您可能还想查看M-x find-diredM-x find-grep-dired

如需更多选项,请查看this similar question的答案。

答案 1 :(得分:4)

Projectile有一个名为 projectile-jump-to-project-file 的函数,可以或多或少地执行您想要的操作。还有find-file-in-project - 一个更简单的实用程序,但取决于GNU find的存在。

答案 2 :(得分:3)

你有没有试过helm?您可以轻松选择搜索文件,缓冲区,命令以及许多其他内容。

答案 3 :(得分:2)

你提到了冰柱,但你错误地认为它“浅薄地运作”。它可以按照您希望的方式工作。如果需要,您可以搜索系统上的任何文件,匹配文件名和路径的任何部分。您可以定义特定文件和/或目录的项目,保存其定义,然后仅在这些文件/目录中进行搜索。 (Emacs文件集是此功能的严格子集,但您可以直接使用文件集。)

这应该有所帮助(另见该页末尾的链接):

http://www.emacswiki.org/emacs/Icicles_-_File-Name_Input