在Emacs中,是否有访问最近打开的文件的命令?

在Emacs中,是否有访问最近打开的文件的命令?,emacs,ido-mode,recent-file-list,Emacs,Ido Mode,Recent File List,在Emacs中,是否有打开最近打开的文件的命令?像一样访问最近的文件 请注意,我不想查看最近文件的列表,然后选择一个。我想自动访问最近打开的一个 只需一次按键,就可以访问最近打开的文件(不再在当前缓冲区中)。然后通过再次调用击键来访问下一个最近打开的文件,依此类推 这样,通过按下该按键四次(例如,A-UP),我就可以自动打开最近使用的文件列表中的前四个文件 我已经可以通过浏览最近的文件,按C-x C-f UP RET来实现这一点,但只需一次按键(例如,a-UP)就可以了。您可以使用recentf

在Emacs中,是否有打开最近打开的文件的命令?像
一样访问最近的文件

请注意,我不想查看最近文件的列表,然后选择一个。我想自动访问最近打开的一个

只需一次按键,就可以访问最近打开的文件(不再在当前缓冲区中)。然后通过再次调用击键来访问下一个最近打开的文件,依此类推

这样,通过按下该按键四次(例如,
A-UP
),我就可以自动打开最近使用的文件列表中的前四个文件


我已经可以通过浏览最近的文件,按C-x C-f UP RET来实现这一点,但只需一次按键(例如,
a-UP
)就可以了。

您可以使用recentf软件包来实现这一点:

(require 'recentf)
(defvar my-recentf-counter 0)
(global-set-key (kbd "<M-up>")
        (lambda ()
          (interactive)
          (setq my-recentf-counter (1+ my-recentf-counter))
          (recentf-open-most-recent-file my-recentf-counter)))
(需要“recentf”)
(defvar my recentf计数器0)
(全局设置键(kbd“”)
(lambda()
(互动)
(设置我的接收计数器(1+我的接收计数器))
(recentf打开最近的文件我的recentf计数器)))

您可能会遇到这样的问题,“最近”列表中有您不感兴趣的文件(在退出Emacs时保存的临时文件)。使用recentf exclude变量从最近打开的文件列表中排除这些文件。

基于pokita的答案

(defun visit-most-recent-file ()
  "Visits the most recently open file in `recentf-list' that is not already being visited."
  (interactive)
  (let ((buffer-file-name-list (mapcar 'buffer-file-name (buffer-list)))
        most-recent-filename)
    (dolist (filename recentf-list)
      (unless (memq filename buffer-file-name-list)
        (setq most-recent-filename filename)
        (return)))
    (find-file most-recent-filename)))

我没怎么测试过这个。

谢谢!除了我们需要一种方法来重置最近的f列表外,这种方法是有效的。i、 e.如果我按,它将成功打开我最近的文件。如果我随后进行了所需的更改,保存文件,删除缓冲区,然后在需要再次打开时按下,它将打开我的下一个最新文件,而不是重新打开我一直在处理的文件,即使该文件现在是最新的。解决方案?您可以这样做(添加hook'kill buffer hook(lambda()(setq my recentf counter 0))),但我有一种预感,您很快也会看到其他问题。我正在使用recentf interactive complete,对此我很满意。或者,由于您使用的是ido,请查看较新Emacsen中的ido virtual buffers变量。