Как просматривать последние файлы (не только имена файлов) в Emacs?
Я использую библиотеку Emacs под названием buffer-stack, чтобы пролистывать мои текущие открытые буферы. Это здорово, потому что позволяет мне исключать неинтересные буферы, такие как Сообщения, и просматривать только буферы с содержимым, которое я создал. Я просматриваю эти буферы одним нажатием клавиши, A-right.
Я также использую режим Ido для просмотра имен недавно открытых файлов.
Тем не менее, я хотел бы иметь возможность просматривать не только имена файлов, но и реальные файлы, желательно одним нажатием клавиши.
Как я могу просмотреть недавно открытые файлы?
2 ответа
Ты можешь использовать helm-recentf
И его persistent-action
для этого.
Вы можете выбрать недавний файл с помощью helm-recentf
как ниже.
И вы можете увидеть содержимое файла, нажав Ctrl-z
(Стойкие действия). вы нажимаете Ctrl-z
, а затем показать его содержимое в другое окно (в данном случае верхнее окно) временно.
Пожалуйста, смотрите официальный документ, если вы узнаете о шлеме
Вот два возможных решения (в зависимости от того, какой именно вариант использования вы хотите).
(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)