Могу ли я изменить историю поиска файлов Emacs? - PullRequest
8 голосов
/ 03 марта 2009

Когда я вызываю find-file, чтобы открыть новый файл, обычно бывает, что файл, который я ищу, находится в одном из каталогов, из которых я уже загружен.

В идеале я бы хотел прокрутить историю, используя стрелки вверх / вниз.

Проблема в том, что если я уже загрузил 10 файлов из каталога, мне сначала нужно пройти через эти десять файлов, все в одном каталоге, прежде чем я увижу новый каталог, в котором может находиться мой файл. 1005 *

В конце я часто просто набираю каталог или вырезаю / вставляю его из xterm.

в команде find-file, можно ли изменить поведение стрелок вверх / вниз для перебора каталогов вместо файлов.

В качестве альтернативы, можно ли изменить порядок файлов в соответствии с порядком буферов, которые использовались последними, вместо того, когда я загружал файл?

Ответы [ 5 ]

4 голосов
/ 04 марта 2009

Я предлагаю IDO . Вы можете искать в списке буферов или в find-файле. При поиске в find-файле он не находит совпадений в текущей папке, он просматривает историю.

4 голосов
/ 03 марта 2009

Мой первый ответ страдал от поведения, которое завершение TAB больше не работало, как ожидалось в 'find-file. Но техника все еще кажется полезной (и, если вам это нравится, предпочтительнее).

Однако, это решение имеет то же самое поведение истории, но поддерживает завершение TAB, как и ожидалось, внутри 'find-file.

Мне было бы интересно узнать, есть ли способ избежать рекомендации по поиску файла, но я не смог найти ни одного самоанализа, который дал бы мне знание о том, что был найден файл поиска.

(defadvice find-file (around find-file-set-trigger-variable protect activate)
  "bind a variable so that history command can do special behavior for find-file"
  (interactive (let (inside-find-file-command) (find-file-read-args "Find file: " nil)))
  ad-do-it)

(defadvice next-history-element (around next-history-element-special-behavior-for-find-file protect activate)
  "when doing history for find-file, use the buffer-list as history"
  (if (boundp 'inside-find-file-command)
      (let ((find-file-history (delq nil (mapcar 'buffer-file-name (buffer-list))))
            (minibuffer-history-variable 'find-file-history))
        ad-do-it)
    ad-do-it))
1 голос
/ 03 марта 2009

Это будет использовать порядок списка буферов для истории, который вы хотите.

(setq read-file-name-function 'my-read-file-name)
(defun my-read-file-name (prompt dir default-filename mustmatch initial predicate)
  (let ((default-directory dir)
        (files (directory-files dir))
        (history (delq nil (mapcar 'buffer-file-name (buffer-list)))))
    (completing-read prompt files predicate mustmatch initial 'history)))

Хммм ... Это меняет поведение завершения TAB-файла find-file, потому что TAB завершается по истории (уже открытые файлы), а не по файлам, доступным в указанном вами каталоге.

Немного сложнее заставить их работать одновременно ...

1 голос
/ 03 марта 2009

не то, что вы хотите, но

Вы пробовали (список электрических буферов) Ctrl-x Ctrl-b?

или (заправлено)?

0 голосов
/ 05 сентября 2011

С помощью Сосульки вы можете переключаться между именами файлов-кандидатов и сортировать их различными способами. Вы можете получить к ним доступ в порядке последнего использования и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...