(Обновлен в основном для включения актуальных инструкций по настройке для использования с нижеупомянутым find-file-in-project.el из дистрибутива RINARI. Исходный ответ остался без изменений; новые биты идут после второго горизонтального правила .)
Загляните на страницу TextMate EmacsWiki. Наиболее многообещающая вещь, которую они упоминают, это, вероятно, этот сценарий Emacs Lisp , который обеспечивает рекурсивный поиск по «каталогу проекта», управляемому некоторыми переменными. Этот файл начинается с обширного раздела комментариев, описывающего, как его использовать.
Особенно многообещающим является следующий бит:
;; If `ido-mode' is enabled, the menu will use `ido-completing-read'
;; instead of `completing-read'.
Заметьте, я сам этим не пользовался ... Хотя я вполне могу попробовать, когда нашел это! : -)
НТН.
(Кстати, этот сценарий является частью - цитируя описание из GitHub - «Rinari - не IDE-среда Rails (это второстепенный режим Emacs для Rails)». Если вы занимаетесь разработкой на Rails, вы может захотеть проверить все это.)
Прежде чем продолжить, настройте ido.el . Серьезно, это просто необходимая опция и , которая улучшит ваш опыт поиска файлов в проекте. Смотрите эту скринкаст от Стюарта Халлоуэя (о котором я уже упоминал в комментарии к этому ответу), чтобы узнать, почему вам нужно его использовать. Кроме того, Stu демонстрирует гибкость ido, эмулируя средство поиска файлов в рамках проекта TextMate по-своему; если его функция соответствует вашим потребностям, не читайте дальше.
Хорошо, вот как настроить RINARI find-file-in-project.el
:
Получите find-file-in-project.el
и project-local-variables.el
из дистрибутива RINARI и поместите куда-нибудь, где Emacs сможет их найти (что означает в одном из каталогов в load-path
variable; вы можете использовать (add-to-list 'load-path "/path/to/some/directory")
для добавления в него новых каталогов).
Добавьте (require 'find-file-in-project)
в файл .emacs
. Также добавьте следующее, чтобы последовательность C-x C-M-f
вызвала приглашение find-file-in-project: (global-set-key (kbd "C-x C-M-f") 'find-file-in-project)
.
Создайте файл с именем .emacs-project
в корневом каталоге ваших проектов. Как минимум, он должен содержать что-то вроде этого: (setl ffip-regexp ".*\\.\\(clj\\|py\\)$")
. Это сделает так, что будут искать только те файлы, имена которых и в clj
или py
; пожалуйста, настройте регулярное выражение в соответствии с вашими потребностями. (Обратите внимание, что это регулярное выражение будет передано утилите Unix find
и должно использовать предпочтительный синтаксис регулярных выражений find
. Вам все равно придется удваивать каждый обратный слеш в регулярных выражениях , как обычно в Emacs; нужно ли вам ставить обратную косую черту перед паренсом / каналом (|
), если вы хотите использовать их «магическое» значение регулярного выражения, зависит от ваших ожиданий find
. Приведенный выше пример работает для меня на коробке с Ubuntu. дополнительная информация о регулярных выражениях в случае сомнений.) (Примечание: этот пункт был изменен в последнем редакторе, чтобы исправить некоторую путаницу с синтаксисом регулярных выражений.)
C-x C-M-f
прочь.
Существует множество возможных настроек; в частности, вы можете использовать (setl ffip-find-options "...")
для передачи дополнительных опций команде Unix find
, к которой find-file-in-project.el
обращается из-под капота.
Если что-то не работает, пожалуйста, проверьте и перепроверьте правильность написания - я однажды сделал что-то вроде (setl ffip-regex ...)
(обратите внимание на отсутствие последнего символа 'p' в имени переменной), и был поначалу весьма озадачен, обнаружив, что файлы не найдены.