除了上面的答案,helm可能是一个很好的解决你的问题的方法。虽然它在复杂的模式匹配和创建/管理/保存复杂的文件集方面做得比冰柱少,但 helm 做得既好又快(从击键的角度和软件/延迟的角度来看)。只要M-x package-install <ret> helm <ret>
你准备好了。
首先,helm 可以跟踪recenf
,你最近使用的文件的列表。只需M-x helm-recentf
键入与您想要的文件名匹配的字符串/正则表达式,它将与您最近打开的文件名实时匹配。滚动并输入以选择一个。
可是等等!还有更多:(对不起,如果这开始听起来像广告)如果你在 Linux 上(我假设你在路径中使用斜杠并且似乎 emacs+linux > mac+linux),你可以使用 GNU locate,这是一个在系统上任何地方查找文件的工具,只要 locate 守护进程以前见过它,如果文件已经存在了任何时间,它可能已经存在(见下文何时它没有) . 这几乎是实时的。定位过程很快,并且 helm 实时流式传输结果。的命令是M-x helm-locate
。
现在,如果你想在 git/mercurial/bazaar/etc 中查找文件怎么办?项目?您可以使用projectile,一个“项目交互库”。使用 helm-projectile(您需要同时安装 projectile 和 helm-projectile,就像安装 helm 本身一样)。它将文件/目录名称和其他任何内容流式传输到 helm。再次。您只需要输入一个匹配任何地方的子字符串,helm 就会为您找到它。M-x helm-projectile
它的 Github README 说“helm 有很多能力”。要掌舵的还有很多很多。尝试 helm-moccur、helm-ack(外部包)、helm-imenu、helm-browse-code、helm-tracker-search、helm-dabbrev 等等等等。
最后:为什么要选择一个?helm 做得很好的一件事是创建你自己的命令。这是一个搜索上述所有内容的函数。
;; you'll need to require helm-config and helm-projectile somewhere above
(defun my-helm-omni (&rest arg)
;; just in case someone decides to pass an argument, helm-omni won't fail.
(interactive)
(helm-other-buffer
(append '(helm-c-source-buffers-list ;; list of all open buffers
helm-c-source-recentf) ;; all recent files
;; projectile errors out if you're not in a project
(if (projectile-project-p) ;; so look before you leap
'(helm-source-projectile-files-list
helm-source-projectile-recentf-list
helm-source-projectile-buffers-list)
'())
'(
helm-c-source-files-in-current-dir ;; files in current directory
helm-c-source-locate ;; file anywhere
helm-c-source-bookmarks ;; bookmarks too
helm-c-source-buffer-not-found ;; ask to create a buffer otherwise
))
"*helm-omni*"))
我有这个必然C-c o