当我调用find-file打开一个新文件时,通常会发生我正在查找的文件位于我已加载的目录之一。
理想情况下,我想使用向上/向下箭头滚动浏览历史记录。
这个问题是,如果我已经从目录中加载了10个文件,我首先必须通过这10个文件,所有文件都在同一个目录中,然后才会看到我的文件所在的新目录。 / p>
最后,我经常再次输入目录或从xterm剪切/粘贴它。
在find-file命令中,我是否可以更改向上/向下箭头的行为来迭代目录而不是文件。
或者,我可以更改文件顺序以匹配最近访问的缓冲区的顺序,而不是在我加载文件时吗?
答案 0 :(得分:4)
我的第一个答案遭遇了TAB完成在'find-file中不再按预期工作的行为。但这项技术似乎仍然有用(如果你喜欢它,最好)。
但是,此解决方案具有相同的历史记录行为,但在“find-file”中保持TAB完成符合预期。
我有兴趣知道是否有办法避免建议查找文件,但我找不到任何能让我知道“查找文件被调用”的内省。
(defadvice find-file (around find-file-set-trigger-variable protect activate)
"bind a variable so that history command can do special behavior for find-file"
(interactive (let (inside-find-file-command) (find-file-read-args "Find file: " nil)))
ad-do-it)
(defadvice next-history-element (around next-history-element-special-behavior-for-find-file protect activate)
"when doing history for find-file, use the buffer-list as history"
(if (boundp 'inside-find-file-command)
(let ((find-file-history (delq nil (mapcar 'buffer-file-name (buffer-list))))
(minibuffer-history-variable 'find-file-history))
ad-do-it)
ad-do-it))
答案 1 :(得分:4)
我建议IDO。您可以在缓冲区列表或查找文件中进行搜索。在find-file中搜索并且当前文件夹中没有匹配项时,它会搜索历史记录。
答案 2 :(得分:1)
不是你想要的,但是
你试过(电子缓冲列表)Ctrl-x Ctrl-b?
或(dired)?
答案 3 :(得分:1)
这将使用缓冲列表的历史顺序,这就是你想要的。
(setq read-file-name-function 'my-read-file-name)
(defun my-read-file-name (prompt dir default-filename mustmatch initial predicate)
(let ((default-directory dir)
(files (directory-files dir))
(history (delq nil (mapcar 'buffer-file-name (buffer-list)))))
(completing-read prompt files predicate mustmatch initial 'history)))
嗯...这会改变查找文件的TAB完成行为,因为TAB完成了历史记录(已经打开的文件),而不是你指定的目录中的可用文件。
让两者同时工作有点棘手......
答案 4 :(得分:0)
使用Icicles,您可以在候选文件名之间循环,并且可以通过多种方式对它们进行排序。您可以按照上次使用的顺序访问它们等。