我使用一个名为buffer-stack的 Emacs 库来分页浏览我当前打开的缓冲区。这很棒,因为它允许我排除无趣的缓冲区,如消息,并仅浏览包含我创建的内容的缓冲区。我用一个按键 A-right 浏览这些缓冲区。
我还使用 Ido 模式浏览最近打开的文件的名称。
但是,我希望不仅可以浏览文件名,还可以浏览实际文件,最好是一次按键。
如何浏览最近打开的文件?
我使用一个名为buffer-stack的 Emacs 库来分页浏览我当前打开的缓冲区。这很棒,因为它允许我排除无趣的缓冲区,如消息,并仅浏览包含我创建的内容的缓冲区。我用一个按键 A-right 浏览这些缓冲区。
我还使用 Ido 模式浏览最近打开的文件的名称。
但是,我希望不仅可以浏览文件名,还可以浏览实际文件,最好是一次按键。
如何浏览最近打开的文件?
您可以将helm-recentf
其persistent-action
用于此目的。
您可以选择最近的文件,helm-recentf
如下所示。
您可以通过按Ctrl-z
(persistent-action) 查看文件内容。您按Ctrl-z
,然后将其内容临时显示到另一个窗口(在本例中为上窗口)。
了解helm请看官方文档
这里有两种可能的解决方案(具体取决于您想要的用例)。
(defun zin/open-recent-file ()
"Open the most recent currently closed file.
This will omit currently open files, instead it will retrieve the
next oldest file in recentf-list."
(interactive)
(let* ((count 0)
(recent recentf-list)
(r-length (length recent))
(buffers (mapcar 'buffer-file-name (buffer-list))))
;; Compare next file on the list to open buffers, if open skip it.
(while (member (nth count recent)
buffers)
(setq count (1+ count))
(if (= r-length count)
(error "All recent buffers already open")))
(find-file (nth count recent))))
(lexical-let ((recent-count 0))
(defun zin/visit-recent-file ()
"Visit files on the recentf-list in descending order.
This will work backwards through recentf-list visiting each file
in turn."
(interactive)
;; If last command was not to cycle through the files, then start
;; back at the first in the list.
(unless (eq last-command 'zin/visit-recent-file)
(setq recent-count 0))
;; If current buffer is the current entry on the list, increment.
(if (equal (buffer-file-name) (nth 0 recentf-list))
(setq recent-count (1+ recent-count)))
;; Error if all entries have been processed
(if (= recent-count (length recentf-list))
(error "At oldest recent buffer"))
;; Open appropriate file.
(find-file (nth recent-count recentf-list))))
第一个将浏览最近的文件列表 ( recentf-list
) 并打开下一个未打开的文件。第二个将用于recentf-list
循环到列表中的下一个缓冲区,直到所有内容都被访问然后出错(因为列表顺序将随着文件的重新打开而改变)。
要让它在到达终点时重新开始循环,只需(error ...)
将
(setq recent-count 0)