emacs - как сделать поиск по файлу в подкаталогах - PullRequest
9 голосов
/ 09 августа 2011

Я бы хотел реализовать что-то вроде функции 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 ]

5 голосов
/ 09 августа 2011

Хотя вы, возможно, не захотите держать много открытых буферов, вы можете подключить 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.

Чтобы узнать больше, ознакомьтесь с ответами на этот похожий вопрос .

4 голосов
/ 10 августа 2011

Projectile имеет функцию с именем projectile-jump-to-project-file , которая делает более или менее то, что вы хотите.Существует также find-file-in-project - более простая утилита, но зависящая от наличия GNU find.

3 голосов
/ 09 августа 2011

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

2 голосов
/ 19 августа 2011

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

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

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

...