Нещодавно відкриті файли в режимі ido


12

Я використовую ido-mode, але одне, що я ненавиджу в цьому, це те, що після того, як C-x C-fя не можу використовувати up/downклавіші для переходу через нещодавно відкриті файли, як це було, наприклад, з iswitchb. Як я можу налаштувати idoроботу таким чином?

Відповіді:


16

Переглядаючи параметри налаштування для ido-mode( M-x customize-group RET ido RET), я не бачу жодних варіантів включення поведінки на велосипеді, яку ви описуєте.

Однак ви можете додати до init-файлу таке:

(require 'recentf)

(defun ido-recentf-open ()
  "Use `ido-completing-read' to find a recent file."
  (interactive)
  (if (find-file (ido-completing-read "Find recent file: " recentf-list))
      (message "Opening file...")
    (message "Aborting")))

(global-set-key (kbd "C-x C-r") 'ido-recentf-open)

За допомогою цього місця ви можете натиснути, C-x C-rщоб отримати завершення Ido для вибору нещодавно відкритих файлів.

За замовчуванням 20 найновіших файлів зберігатимуться в історії. Я пропоную вам закрутити це до 150 крок, встановивши recentf-max-saved-items:

(setq recentf-max-saved-items 150)

Бонус: доступ до останніх файлів, стероїдних видань

Я не бачу його в багатьох місцях, але віртуальними буферами Ido дуже легко отримати доступ до останніх файлів. Увімкніть їх так:

(setq ido-use-virtual-buffers t)

Поведінка, яку ви отримуєте, така:

Якщо немає nil, зверніться до попередніх ("віртуальних") буферів, а також до існуючих.

По суті це працює так: Скажіть, ви відвідуєте файл, і буфер очищається midnight.el. Пізніше ви хочете перейти до цього буфера, але виявите, що він більше не відкритий. Якщо увімкнено віртуальні буфери, ім’я буфера залишається у списку буферів (використовуючи ido-virtualобличчя та завжди в кінці), і якщо ви виберете його, воно відкриє файл назад знову. Це дозволяє менше думати про те, чи нещодавно відкриті файли все ще відкриті чи ні. Більшу частину часу ви можете вийти з Emacs, перезапустити і потім перейти на файловий буфер, який раніше був відкритий, як ніби він був.


Поки я схвалив, я прийму пізніше, коли перевіряю його і зрозумію, як це працює. (моє розуміння lisp дуже слабке).
WeSenseASoulInSearchOfAnswers

@WeSenseASoulInSearchOfAnswers Звичайно, знайдіть свій час. Повідомте мене, якщо у вас є конкретні запитання щодо коду, який я опублікував.
itjeyd

Я прийняв, але, чесно кажучи, мені це не подобається, оскільки з C-x C-rним неможливо відкрити новий файл. Я також здивований, що неможливо налаштувати його просто. Історія Росії C-x C-fнастільки очевидна особливість, що я не можу зрозуміти, чому вона ще не реалізована ido. Наприклад, M-x up/downцикли за допомогою останніх команд, M-% up/downцикли через останні запити замінюють навіть поза emacs - всі оболонки як bash або zsh використовують вгору / вниз для виклику попередніх команд. Для мене C-x C-f up/downслід переглядати нещодавно відкриті файли. Повна зупинка.
WeSenseASoulInSearchOfAnswers

@WeSenseASoulInSearchOfAnswers Я згоден з вами, і я не маю поняття, чому це не доступно або настроюється поза коробкою. Для мене особисто це не велика справа, оскільки я використовую функцію віртуальних буферів, яку я описую у своїй відповіді, тому перехід на останній файл - це те саме, що перехід на інший буфер; дійсно легко. Але я розумію, що це може бути неприємно, якщо функція, до якої ви звикли користуватися, недоступна.
itjeyd

5
+1 для ido-use-virtual-buffers- відмінна функція, яка дійсно повинна бути включена за замовчуванням IMO.
Джон О.

2

Хоча прив'язки еволюціонували з часом, на сьогоднішній день, коли ви викликаєте ido-find-fileабо ido-find-file-read-only, ви можете використовувати такі прив'язки, доступні в конфігурації за замовчуванням:

  • M-o викликає ido-prev-work-file
  • C-M-o викликає ido-next-work-file

Крім цього , не будучи в ергономічно приємним , як M-pі M-nприв'язок я звик до перш ніж намагатися IDO , вони також повільно, і , як наслідок , мінібуфер балаканина відволікає і заплутаною. ido робить щось більше, ніж просто показує нещодавно відкрите ім'я файлу; він повідомляє, що це "Пошук" імені файлу "...", можливо, не бажаючи пропонувати ім'я для файлу, якого більше немає.

Повідомлення "Пошук" походить від функції ido-make-merged-file-list. Читаючи джерело , я не бачу жодного способу відключити будь-яку магію цієї функції.

Ви можете розглянути можливість відновлення ido-prev-work-fileта ido-next-work-fileпари на щось більш природне, як-от C-M-pі C-M-n, або заміну поточних M-p( ido-prev-work-directory) та M-n( ido-next-work-directory) прив'язків для них.

Ось код Emacs Lisp для відновлення M-pта M-nпереходу останніх файлів, переміщення стандартних посилань, орієнтованих на каталог, C-M-pта C-M-nвідповідно:

(add-hook 'ido-setup-hook
          (lambda ()
            (let ((kmap ido-file-dir-completion-map))
              (let ((key '(meta ?n)))
                (define-key kmap (vector (cons 'control key))
                  (lookup-key kmap (vector key)))
                (define-key kmap (vector key) 'ido-next-work-file))
              (let ((key '(meta ?p)))
                (define-key kmap (vector (cons 'control key))
                  (lookup-key kmap (vector key)))
                (define-key kmap (vector key) 'ido-prev-work-file)))))

1
Ласкаво просимо в Emacs SE! Постарайтеся, щоб ваші відповіді були зосереджені на запитанні оригінального плаката. Безумовно, ваш коментар щодо "балачки про мінібуфер" цікавий і пов'язаний, але це відволікає від пошуку реальної відповіді на питання. Що ще важливіше: будь ласка, спробуйте сформулювати свою відповідь у формі ... ну, відповіді. Те, що ви написали, більше схоже на коментар, який не дуже підходить для подібного веб-сайту.
паприка

Ну, перший абзац та його наступний список відповідає на початкове запитання, яке шукало клавіші для перегляду нещодавно відкритих файлів. Ці прив'язки існують за замовчуванням, але жоден з інших відповідей тут не згадував про ці прив'язки. Я працюю над кодом перезавантаження і включаю його у свою відповідь, як тільки я його задовольняю.
seh

2

до чого я вдався в цьому випадку, повертається до нормальної поведінки мінібуфера, ввівши Cf в ідомоді. Тоді у вас будуть звичайні клавіші перегляду історії. Якщо ви знаєте це заздалегідь, це може бути швидким: Cxff :-)


1

Відповідь, яку дав @itsjeyd, досить повна. Дозвольте лише запропонувати функцію:

(defun ido-choose-from-recentf ()
  "Use ido to select a recently visited file from the `recentf-list'"
  (interactive)
  (find-file (ido-completing-read "Open file: " recentf-list nil t)))

;; bind it to "C-c f"
(global-set-key (kbd "C-c f") 'ido-choose-from-recentf)

Люб’язно надано WikEmacs


1

Я виявив, що helm-for-filesпрацює краще, ніж будь-який із вищезазначених відповідей для автоматичного завершення імені файлів та гарного інтерфейсу пошуку. Крім того, ви можете налаштувати його для включення будь-яких елементів пошуку, які вам подобаються.


1
@Drew helm оснащений самим режимом ido. Більшість випадків, коли люди шукають цю публікацію, їм може бути цікаво знати інші альтернативи для вирішення проблеми.
користувач10375
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.