Emacs: отображение списка подпрограмм / функций / классов в исходном файле

5

Я годами пользуюсь малоизвестным редактором под названием «FTE» (или eFTE); у него есть хорошая утилита, которая может отображать список подпрограмм / функций / классов (или любую другую вещь - в зависимости от того, какое регулярное выражение вы определяете в его файле конфигурации) в исходном текстовом файле (C, C ++, Fortran, ... что там у вас). Эта функция позволяет мне быстро переходить из одной точки в другую в исходном файле. Возможно, оригинальный ярлык в FTE ^I(Control + I). Emacs имеет подобную функциональность? Emacs гораздо более продвинутый, чем FTE, и я был бы удивлен, если бы никто не разработал такой объект.

Спасибо, Wirawan

Wirawan Purwanto
источник
1
Я не использовал emacs, но я думаю, что вы можете искать какую-то ctagsинтеграцию.
Гравитация

Ответы:

10

Try M-x occur RET exp RET- это перечисляет в новом буфере все вхождения expв текущем буфере.

Дрор
источник
Как я использую Emacs уже более двух лет и до сих пор не узнал об этом? Если бы я мог высказать ваш ответ более одного раза, я бы сделал.
Аарон Миллер
3
@AaronMiller Добро пожаловать в секретный лес, в котором скрыты очень полезные, но малоизвестные феи функции Emacs :-) Еще одна (связанная) очень полезная функция re-builder, которая позволяет создавать регулярные выражения в интерактивном режиме, постепенно, выделяя все совпадения в буфере, из которого она была называется. Наслаждайтесь :-)
Ack
7

Большинство людей, конечно, скажут вам просто использовать современную IDE, но они не понимают всю силу emacs. Лично я использую ECB, который emacsвыглядит так:

введите описание изображения здесь

Среднее окно с левой стороны - это список функций текущего исходного файла. Средний щелчок по имени перемещает курсор к определению этой функции.

Для установки следуйте инструкциям на веб-сайте ECB, чтобы установить ECB, а затем добавьте эту строку в свой ~/.emacs(изменив местоположение соответствующим образом):

(add-to-list 'load-path
             "~/.emacs-lisp/ecb/")

Другим вариантом является CEDET, но я не использовал его.

terdon
источник
Я видел ЕЦБ раньше, но всегда уклонялся, потому что он кажется ужасно тяжелым. Как ты нашел это?
Аарон Миллер
@AaronMiller Честно говоря, я влюблен в это. Я наконец получил все свое затмение, используя друзей, чтобы заткнуться. Это своего рода тяжеловес, но я включаю его с помощью ярлыка, когда это необходимо, и это занимает около секунды, может быть, два, не больше (на моем 3-летнем ноутбуке). Я очень доволен этим, хотя, кажется, вспоминаю, что установка не была безболезненной. Я бы порекомендовал вам попробовать, и если он слишком тяжелый, не используйте его. Имейте в виду, ECB является старым (последняя версия ~ 2009), поэтому CEDET может быть лучшим вариантом.
тердон
Спасибо! Я попробую это и CEDET оба (я понимаю, 24.3 имеет встроенный CEDET 2), не в последнюю очередь потому, что я нахожу вашу точку зрения об Eclipse неотразимой. :)
Аарон Миллер
1

В Emacs есть несколько способов получить эту функциональность.

Более легкий метод - с помощью тегов , которые с подходящей настройкой могут служить большинству целей. После того, как вы создали файл тегов (который выполняется в оболочке, например, через cd /path/to/project; ctags -e -R .) и выбрали его через M-x visit-tags-table RET /path/to/TAGS RET, вы можете, например, использовать M-.вызов функции, чтобы перейти к определению функции, M-x tags-searchпролистать путь по описанным файлам. в таблице тегов и т. д. Смотрите на связанной странице довольно подробное описание доступных инструментов.

Более тяжелый метод - это Semantic , комбинация лексера / парсера, полностью реализованная в Emacs Lisp. Хотя я не так хорошо знаком с Semantic, как с тегами, у меня сложилось впечатление, что Semantic несет более тяжелую начальную нагрузку при установке в обмен на более общий полезный результат. В дополнение к связанной странице справочника (статья в Emacs Wiki) [ http://www.emacswiki.org/emacs/SemanticBovinator] может оказать здесь дополнительную помощь.

Аарон Миллер
источник
1

Вы сказали «отобразить список подпрограмм / функций / классов (или любую другую вещь - в зависимости от того, какое регулярное выражение вы определяете в его файле конфигурации) в исходном текстовом файле». Не обращая внимания на роль в паранах на данный момент, на которую ответили другие, неясно, что вы подразумеваете под функцией и т. Д. Находясь « в » исходном файле.

Если вы спрашиваете о просмотре списка функций и т. Д., Которые определены в данном исходном файле, а затем о навигации по их определениям, посмотрите Imenuв Emacs. Смотрите руководство по Emacs, узел Imenu. Смотрите также эту EmacsWiki страницу о Imenu :

Нарисовался
источник
1

Используйте Imenu :

  1. M-X imenu
  2. tab, All.Methods
  3. tab увидеть все методы
cweiske
источник