как просмотреть последние файлы (а не только имена файлов) в Emacs?

Я использую библиотеку Emacs под названием buffer-stack для просмотра открытых в данный момент буферов. Это здорово, потому что позволяет исключать неинтересные буферы, такие как Сообщения, и просматривать только буферы с содержимым, которое я создал. Я просматриваю эти буферы одним нажатием клавиши, A-право.

Я также использую режим Ido для просмотра по именам недавно открытых файлов.

Однако я хотел бы иметь возможность просматривать не только имена файлов, но и сами файлы, желательно одним нажатием клавиши.

Как просмотреть недавно открытые файлы?


person incandescentman    schedule 15.02.2013    source источник
comment
Итак, как мы определяем «просмотр» при просмотре реальных файлов?   -  person phils    schedule 15.02.2013
comment
Посетите файлы в буфере. Таким образом, нажатие клавиши (например, A-down) откроет последний открытый файл, а повторное нажатие приведет к переходу к следующему самому последнему и так далее.   -  person incandescentman    schedule 15.02.2013


Ответы (2)


Вы можете использовать helm-recentf и его persistent-action для этой цели.

Вы можете выбрать последний файл с помощью helm-recentf, как показано ниже.

введите здесь описание изображения

И вы можете увидеть содержимое файла, нажав Ctrl-z (постоянное действие). вы нажимаете Ctrl-z, затем временно показываете его содержимое в другом окне (в данном случае в верхнем окне).

Пожалуйста, ознакомьтесь с официальным документом, если вы узнали о helm

person syohex    schedule 15.02.2013
comment
Вы также можете активировать helm-follow-mode C-c C-f для автоматического просмотра. - person event_jr; 21.04.2014

Вот два возможных решения (в зависимости от того, какой именно вариант использования вы хотите).

(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)
person Jonathan Leech-Pepin    schedule 07.03.2013