Использование 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 +.
Эти библиотеки могут помочь вам создавать, организовывать и управлять проектами, где бы ни находились их файлы и каталоги. И они могут помочь вам перемещаться и искать по-разному.
Некоторые из функций уникальны - они сильно отличаются от других подходов. Я мог бы перечислить часть поддержки проекта здесь, но это лучшее место для начать.