Каждый раз, когда мне приходится копировать имя в моем терминале, запускать grep
и повторно копировать путь к файлу в моем emacs.
Вы можете улучшить этоиспользуя M-x rgrep
внутри Emacs.Он запрашивает регулярное выражение, шаблон глобуса файлов для поиска и каталог для запуска. Затем он выполняет рекурсивный grep, выводит результаты в буфер, и вы можете перейти непосредственно от попаданий к соответствующему файлу.
Для шаблона glob вы можете напечатать что-то вроде *.c
или использовать один из псевдонимов, определенных в переменной grep-files-aliases
.Например, ch
эквивалентно *.[ch]
(исходные файлы C и файлы заголовков), а cchh
эквивалентно *.cc *.[ch]xx *.[ch]pp *.[CHh] *.CC *.HH *.[ch]++
(исходные файлы C ++ и файлы заголовков).
Вы можете обнаружить, что это работает хорошоДостаточно того, что вам не нужны ctags и другие инструменты, предложенные в других ответах и комментариях.
Для простоты поиска определений функций в C некоторые проекты используют соглашение о том, что имя функции в определении начинаетсяв первом столбце:
/* this is just a declaration */
int main(int argc, char *argv[]);
/* in the definition, the function name starts on its own line */
int
main(int argc, char *argv[])
{
...
Это означает, что вы можете найти определение, исключая любые вызовы функции, с помощью регулярного выражения ^main
.