Вы используете Vim. У вас есть инструмент, чтобы сделать это встроенным.
Как и ожидалось, уже есть семь ответов, в которых говорится, что нужно использовать grep
. Но я, кажется, пока единственный человек, который заметил из вашего вопроса, что вы используете vim
. Таким образом, хотя вы можете использовать grep
изнутри vim
, вы также можете использовать встроенный инструмент vim
. Это вызывается с помощью команды :vimgrep
.
Чтобы выполнить поиск «всех исходных файлов C в текущем каталоге для вызовов функции toUpperCase()
», введите команду vim
:vimgrep "\<toUpperCase\_s*(" *.c
Результирующий список совпадений автоматически загружается в список быстрых исправлений, доступный любому из них (см. Интерактивную справку для тонкой разницы)
:copen
:cwin
Чтобы найти определение функции, а не вызовы к ней, ctags
является инструментом, как упомянуто в ответе Gilles
, в сочетании с :tjump
или :tselect
.
Зачем использовать :vimgrep
?
Онлайновая справка (:help grep
) перечисляет несколько причин, которые я не буду здесь описывать. В дополнение к этому, сравните действие :vimgrep
с dietbuddha
. dietbuddha
разветвляет отдельный процесс grep
для каждого отдельного исходного файла C. Он даже не использует xargs
чтобы уменьшить эти накладные расходы. И вам все равно придется как-то анализировать выходные данные, чтобы вызвать ваш текстовый редактор в соответствующих исходных файлах после его завершения. :vimgrep
вообще не отключает несколько дополнительных процессов, а использование результата само по себе просто. При простом выборе одной из записей в результирующем списке быстрых исправлений курсор автоматически помещается на соответствующую строку соответствующего исходного файла.
На самом деле, он делает именно то, что вы написали, вы бы делали вручную, кроме как автоматически. Это автоматизированный способ выполнения тех же самых действий текстового редактора. Он загружает файл, как если бы он был загружен вручную, ищет в нем регулярное выражение (используя тот же синтаксис регулярного выражения, который вы уже использовали в другом месте в vim
), записывает места, где происходят совпадения, и затем выгружает файл.