Использование Emacs для крупных крупных проектов

Возможно, здесь часто повторяется вопрос, но я не могу найти ничего похожего на поиск. Дело в том, что мне нравится использовать Emacs для моих личных проектов, как правило, очень маленьких приложений с использованием C или python, но мне было интересно, как использовать его также для моей работы, в которой у нас есть проект с примерно 10k файлами исходного кода, поэтому veeeery big (на самом деле я использую исходное представление, это очень хороший инструмент, но только для окон), вопросы:

  • Поиск: что является наиболее удобным способом поиска строки во всем проекте?
  • Навигация по функции: я имею в виду что-то вроде наведения курсора на функцию, определение, var и переход к определению
  • Рефакторинг

Кроме того, если у вас есть опыт с этим и вы хотите поделиться своими мыслями, я буду считать его очень интересным.

Вг

Ответы

Ответ 1

Мои проекты обычно живут в git, поэтому я собрал их для быстрого поиска:

;; There something similar (but fancier) in vc-git.el: vc-git-grep
;; -I means don't search through binary files
(defcustom git-grep-switches "--extended-regexp -I -n --ignore-case"
  "Switches to pass to `git grep'."
  :type 'string)

(defun git-grep (command-args)
  (interactive
   (list (read-shell-command "Run git-grep (like this): "
                             (format "git grep %s -e "
                                     git-grep-switches)
                             'git-grep-history)))
  (let ((grep-use-null-device nil))
    (grep command-args)))

Ответ 2

"Традиционным" способом навигации по исходным файлам C является использование "etags" для создания файла под названием TAGS, затем используйте ALT-. для перехода к функциям между файлами.

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

Ответ 3

Существует также браузер Emacs Code Browser. Это значительно упрощает изучение проектов. Подробнее см. здесь и здесь.

Ответ 4

Что касается поиска во всем проекте, я нахожу чрезвычайно полезным команду rgrep.

Кроме того, imenu довольно удобно переходить к определению функции в том же файле.

Это мои 2p.

Ответ 5

Посмотрите на EDE от CEDET - он обеспечивает базовую поддержку проектов...

Ответ 6

ЕЦБ слишком тяжелый для моего вкуса. У меня были хорошие результаты с помощью xcscope. Излишне говорить, что это не слишком помогает Python.

http://www.emacswiki.org/emacs/CScopeAndEmacs

Ответ 7

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

Мой стандартный поиск:

M-x igrep-find some_regexp RET ~/work_area/*.cxx

Что будет искать все *.cxx файлы в разделе ~/work/area и покажет результаты, соответствующие some_regexp. Как и все утилиты поиска, он заполняет буфер, подобный компиляции, который можно перемещаться с помощью C-x ` (aka M-x next-error).

Ответ 8

Существует много способов: Icicles может помочь с projects. Аналогично, Закладка + и даже Dired +.

Эти библиотеки могут помочь вам создавать, организовывать и управлять проектами, где бы ни находились их файлы и каталоги. И они могут помочь вам перемещаться и искать по-разному.

Некоторые из функций уникальны - они сильно отличаются от других подходов. Я мог бы перечислить часть поддержки проекта здесь, но это лучшее место для начать.