Найти файлы с grep и открыть в редакторе

Я хотел бы использовать grep для поиска по каталогу и открытия файлов со спичками в выбранном редакторе. (emacs или vim будут делать.)

Я могу открыть первое совпадение через vim $(\grep -l "static void main" *), но это не откроет другие соответствующие файлы. \ перед grep используется для использования немодифицированного grep, обычно у меня есть цветной grep, который не будет работать, потому что он приводит к неправильным именам файлов.

Мне известно, что я могу попробовать find, передать результаты каждому в grep и открыть, после чего файл, найденный под вопросом, каждый в новом редакторе, с помощью xargs.


Лучшее рабочее решение:

ИСПОЛЬЗОВАНИЕ:
grepe static void main или
grepv static void main.

Нет "".

УСТАНОВИТЬ:
Поместите это в свой .bashrc.

#emacs:
grepe(){
    emacs $(\grep -irl "$*" .)
}
#vim:
grepv(){
    vim $(\grep -irl "$*" .)
}

Ответ 1

Вы можете использовать ** в шаблоне файла для поиска рекурсивно. Например, для поиска всех строк, содержащих dostuff() во всех файлах .c в родительском каталоге и во всех его подкаталогах, используйте:

:vimgrep /dostuff()/ ../**/*.c

Подробнее @http://vim.wikia.com/wiki/Find_in_files_within_Vim

Для независимого редактора, попробуйте

vim -o $(grep -rl string directory)

Ответ 2

Для Emacs вы обычно выполняете find/grep внутри Emacs.

например. используйте M-x rgrep

Затем результаты обрабатываются Emacs, и вы можете легко перейти к любому результату.

Ответ 3

Во-первых, вы не указываете путь поиска после шаблона.
Для простейшего метода:

vim $(grep -l "static void main" *)

Для более умного (не открывайте Vim, если не было никаких результатов):

files=$(grep -l "static void main" *) && vim $files

Ответ 4

для другого редактора (например, sublimetext subl) я использую для этого:

grep ... -l | xargs subl

-l будет отображать только путь, так что вы сможете напрямую открывать его в редакторе, если он поддерживает командную строку