9

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


(来源:jetbrains.com

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

更新。我也知道打开大量缓冲区的选项,将它们全部保存在内存中并使用switch-to-buffer. 这个解决方案很好地与ido. 它也不能很好地与 . 配合使用tabbar,因为选项卡将显示项目中包含的所有文件,但不会显示代表我当前上下文的项目子集。

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

4

4 回答 4

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-diredand M-x find-grep-dired

如需更多选项,请查看此类似问题的答案。

于 2011-08-09T12:04:03.003 回答
4

你试过掌舵了吗?您可以轻松选择搜索文件、缓冲区、命令和许多其他内容。

于 2011-08-09T17:40:21.623 回答
4

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

于 2011-08-09T20:25:16.047 回答
2

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

这应该会有所帮助(另请参阅该页面末尾的链接):

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

于 2011-08-19T18:20:19.510 回答