Ви використовуєте 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
), записує місця, де виникають збіги, а потім вивантажує файл.