Как я могу перейти к функции при разработке C в Emacs?
Я занимаюсь разработкой C в Emacs. Если у меня есть исходный файл, открытый с несколькими функциями, а "маркер" - при вызове функции, например. int n = get_number(arg);
Можно ли каким-либо образом "перейти" к реализации этой функции? например до int get_number(int *arg) { ... }
Я проделал некоторую разработку Java в Eclipse и упустил эту функцию, потому что я не привык к Emacs, но я хотел бы узнать.
Ответы
Ответ 1
Вам нужно создать файл тега.
В Unix у вас есть программа etags
, которая понимает синтаксис C
, C++
, Java
... и создает файл tag
, который может использоваться Emacs.
Эта более старая страница (2004) содержит дополнительную информацию.
Чтобы перейти к функции, используйте M-. (thats Meta-Period) и введите имя функции. если ты просто нажмите enter. Emacs перейдет к объявлению функции, которое соответствует слову курсор.
Ответ 2
Существует несколько систем "тегов", которые позволяют это (есть один пакет с emacs, есть глобальный GNU, который не связан с emacs, но хорошо сочетается с ним и имеет некоторые преимущества). По сравнению с Eclipse вам нужно будет создать файл тегов.
Тогда существует семантический /EDE, который теперь связан с emacs, который должен предоставить решение без необходимости создания базы данных явно. Я не пытался использовать его в последнее время. Когда я это сделал, у меня была проблема с производительностью, и я обнаружил, что настроение было болезненным. (Возможно, из-за того, что я работаю над большим - несколько 10 миллионов строк - и старыми - некоторые вещи относятся к проекту середины 80-х годов без возможности его реорганизации).
Ответ 3
Я думаю, что семантический режим должен сделать то же самое. Хотя я не пытался переходить к другому файлу, но в одном файле он очень превосходный. Перейдите к переменной, произведите нажатие клавиши C-c , j, она перейдет к определению переменной. Вернитесь к предыдущей строке, используя C-u C-space. Чтобы отобразить ссылку на символ, используйте клавишу C-c , g
Это действительно помогает мне.
Я не пробовал переходить к другому файлу, потому что мой текущий проект - это модифицированная программа Java, где мы используем препроцессор (нестандартный Java-процесс). Поэтому я думаю, что в этом проблема.
Любой успех с семантическим режимом
спасибо
Ответ 4
Мне очень нравится cscope для этого, но etags, вероятно, тоже работает.