emacs - как сделать поиск по файлу в подкаталогах

Я хотел бы реализовать что-то вроде функции Resharper "Go To File" для Emacs. Когда кто-то нажимает упомянутый ярлык, Resharper открывает текстовое поле, которое принимает подстановочную строку и отображает меню автозаполнения, в котором перечислены все файлы в проекте, которые соответствуют этому подстановочному знаку:

http://www.jetbrains.com/resharper/features/screenshots/50/navigation_gotofile.png

На данный момент я знаю грубый способ достичь чего-то более или менее эквивалентного. Это включает в себя бег dired с -lR а затем вызывать dired-isearch-filenames - это начнет инкрементный поиск по всей иерархии файлов внутри определенного корневого каталога.

UPD. Я также знаю о возможности открытия загрузок буферов, хранения их всех в памяти и использования switch-to-buffer, Это решение прекрасно работает с idoхотя это не на 100% пуленепробиваемый (что, если некоторые файлы будут добавлены или удалены?). Это также не очень хорошо с tabbar, поскольку на вкладках будут отображаться все файлы, которые включены в проект, но не подмножество проекта, которое представляет мой текущий контекст.

Тем не менее, это показывает много ненужной информации и не хватает автозаполнения. Я посмотрел на ido а также icicles, но они, кажется, работают поверхностно, только в пределах текущего каталога. Есть ли плагин Emacs, который поможет мне достичь моей цели?

4 ответа

Решение

Хотя вы можете не захотеть держать много буферов открытыми, вы можете подключить IDO к recentf, который отслеживает недавно открытые файлы:

(recentf-mode 1)
(setq recentf-max-saved-items 300)

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

(global-set-key [(meta f11)] 'ido-choose-from-recentf)

Я использую этот трюк в течение многих лет, и это 99% всех необходимых мне переключений файлов.

Помимо этого, я использую M-x rgrepи вы также можете посмотреть на M-x find-dired а также M-x find-grep-dired,

Для получения дополнительных опций, проверьте ответы на этот похожий вопрос.

В Projectile есть функция с именем projectile-jump-to-project-file, которая делает более или менее то, что вы хотите. Есть также https://github.com/bbatsov/find-file-in-project - более простая утилита, но зависящая от наличия GNU find.

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

Вы упомянули сосульки, но по ошибке вы подумали, что они "работают неглубоко". Это работает так, как вы хотите. Вы можете найти любой файл в вашей системе, если хотите, соответствующий любой части имени файла и пути. И вы можете определить проект конкретных файлов и / или каталогов, сохранить его определение, а затем искать только среди этих файлов / каталогов. (Наборы файлов Emacs являются строгим подмножеством этой функции, но вы можете напрямую использовать наборы файлов точно так же.)

Это должно помочь (см. Также ссылки в конце этой страницы):

http://www.emacswiki.org/emacs/Icicles_-_File-Name_Input

Другие вопросы по тегам