Есть ли в emacs функция или библиотека, которые могут позволить пользователю перейти к объявлению функции, даже если оно было определено в другом файле?
Если да, то какие языки поддерживаются?
Источником вдохновения для этого вопроса является статья ниже, в которой говорится о некоторых причинах, по которым emacs никогда не сможет конкурировать с IDE.
http://henrikwarne.com/2012/06/17/programmer-productivity-emacs-versus-intellij-idea/
irony-clang
с этой целью. Вы читали комментарии к статье?Ответы:
Вы можете мгновенно перейти к любому определению / ссылке на весь проект размером с исходное дерево ядра Linux (более 36 КБ). Смотрите подробности в моем руководстве по C / C ++ . Для C / C ++ я предлагаю использовать GNU Global, который поддерживает C, C ++, Yacc, Java, PHP4 и ассемблер.
Ключевым моментом является то, что если вы хотите иметь возможности IDE для языка, вы должны установить плагин для этого языка. Вот несколько пакетов для динамических языков, о которых я знаю:
js2-mode
, что делает, см. Описание ; но по сути,js2-mode
это полный анализатор Javascript, который генерирует AST для выполнения надлежащих функций IDE. Если вы установите,skewer-mode
чем вы будете иметьjs2-mode
по умолчанию, так какskewer-mode
зависит от этого.Вы также можете использовать
ctags
для поддержки большого количества языков, таких как сценарий оболочки или Tcl ...источник
j2-mode
я отредактировал в своем ответе.anaconda
может быть более конкретным решением для определения прыжков в Python.Я столкнулся с аналогичной проблемой с Emacs, поэтому я сделал Dumb Jump . Я пробовал многие из решений, упомянутых в принятом ответе, но всегда сталкивался с одной или несколькими из следующих проблем:
Я очень хотел решение, которое «просто работало» и не требовало настройки или настройки. То есть я хотел клонировать случайное репо на Github и перемещаться по нему, как и любой другой из моих собственных проектов.
Прямо сейчас Dumb Jump имеет базовую поддержку для:
Он доступен через выпуски MELPA и GitHub, и PR приветствуются.
источник
Основным решением для этого в emacs является использование файлов TAGS, которые создаются такими программами, как etags или gtags. Я сам использую (и рекомендую) обильные ctags и etags-select.el, чтобы помочь вам сузить места назначения, когда символ поиска находится в нескольких местах назначения. Поддерживаемых языков довольно много, см. Руководства для отдельных инструментов. Существует даже поддержка добавления вашего собственного языка, благодаря чему вы можете предоставить регулярное выражение, которое инструктирует ctags, как изолировать интересующие вас теги.
источник
ctags -e -R *
из корневого каталога создаст его для вас.