Найти файлы с 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
будет отображать только путь, так что вы сможете напрямую открывать его в редакторе, если он поддерживает командную строку