我想为Emacs实现像Resharper的“Go To File”功能。当按下提到的快捷方式时,Resharper弹出一个接受通配符字符串的文本框,并显示一个自动完成菜单,列出项目中与该通配符匹配的所有文件:
现在,我知道一种粗略的方式来实现或多或少等同的东西。它涉及使用dired
运行-lR
然后调用dired-isearch-filenames
- 这将开始对某些根目录中的整个文件层次结构进行增量搜索。
UPD。我也知道打开缓冲区的选项,将它们全部保存在内存中并使用switch-to-buffer
。此解决方案可以很好地与ido
一起使用,但它不是100%防弹(如果某些文件被添加或删除会怎么样?)。它也不能与tabbar
一起使用,因为选项卡将显示项目中包含的所有文件,但不会显示代表我当前上下文的项目的子集。
然而,这显示了许多不必要的信息,并且缺乏自动完成功能。我已经看了ido
和icicles
,但它们似乎只能在当前目录中浅薄地工作。是否有Emacs插件可以帮助我实现目标?
答案 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-dired
和M-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文件集是此功能的严格子集,但您可以直接使用文件集。)
这应该有所帮助(另见该页末尾的链接):