在 emacs 中按文件名而不是完整路径打开文件

在 emacs 中按文件名而不是完整路径打开文件

假设我有一堆目录,并且可以保证没有两个目录具有共同的文件名(即如果foo/bar存在,则bar在任何其他目录中都不存在)。我怎样才能设置emacs,这样,给定.emacs要搜索的目录中的硬编码列表,我可以告诉它打开bar,并且它发现它在而不是我每次都foo需要告诉它?foo/bar如果它以某种方式处理名称冲突(例如可能的匹配列表),那就更好了,但这不是强制性的,因为我确信在这种情况下目录没有共同的文件名

答案1

当我写这篇文章时,我发现ifind-mode,看起来很对劲。

(setq workspace-dir "/path/to/dir1 /path/to/dir2")
(require 'ifind-mode)
;; maybe change `ifind-command' as well

然后键入M-x ifind-mode以在指定目录(默认情况下为子目录)中查找文件,并快速完成。


我通常做的是e **/bar从 zsh (其中e是 的别名emacsclient)。但如果您已经在使用 Emacs,那么这会造成干扰。另外,如果我经常编辑某个特定文件,我会将其保持打开状态(并保存会话)。

开箱即用,您可以运行M-x find-dired并指定find.但这很笨拙,至少在只有一场比赛的情况下是这样。ifind让这变得不那么笨拙。

ido有很多可能有用的功能,特别是使用 ido 从项目中查找任何文件

答案2

我刚刚发现文件缓存,这非常适合我的目的。表单有几个功能file-cache-add-directory-X可以将文件添加到缓存中,然后在输入文件名的过程中,find-file您可以点击C-Tab以使用缓存自动完成路径(多次点击它循环匹配)

EmacsWiki 帖子包含保存/恢复缓存的功能。我写了一个cron作业,每天晚上自动生成缓存文件;该文件如下所示:

(("filename" "/path/to/that/file/") ("other filename" "/different/path/"))

然后,当 emacs 开始使用 EmacsWiki 上提到的函数时,我会自动从缓存加载:

(require 'filecache)
(defun file-cache-read-cache-from-file (file)
  "Clear `file-cache-alist' and read cache from FILE.
The file cache can be saved to a file using
`file-cache-save-cache-to-file'."
  (interactive "fFile: ")
  (file-cache-clear-cache)
  (let ((buf (find-file-noselect file)))
    (setq file-cache-alist (read buf))
    (kill-buffer buf)))

(file-cache-read-cache-from-file "~/.file-cache")

答案3

有几个替代方案,例如:recentf-mode 和 ido-find-file 来自我愿意包裹。

相关内容