假设我有一堆目录,并且可以保证没有两个目录具有共同的文件名(即如果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 来自我愿意包裹。