A menudo grep un montón de archivos para encontrar una línea, y luego grep devuelve un resultado. En lugar de copiar y pegar el nombre de archivo en un nuevo comando, me gustaría poder abrir ese resultado con un editor. Algo así como: grep foo | vim. ¿Hay alguna manera de hacer eso en BASH?
17

vima leerSTDIN:grep foo | vim -Respuestas:
Úselo
grep -lpara obtener el nombre del archivo correspondiente y no el texto correspondiente, luego combínelo convim:fuente
-qflag ofgreppara asegurarse de que grep haya resultado en algún archivo coincidente:grep -q patterns fnames && vim $(grep -l pattern fnames)vise queja, el PO no.Puede usar
quickfixoerrorfilepresentar envim:Vim abrirá el primer archivo
/tmp/foo.listy colocará el cursor directamente en la línea dondefoose encontró. Puede ir a la siguiente instancia usando:cny la instancia anterior usando:cp.Nota al margen : si ya está utilizando
vimogvim, entonces sugeriría usar sugrepfuncionalidad incorporada . Leer:help vimgreppara más información.fuente
Para buscar en el proyecto no es necesario dejar vim con Fugitive
autocmd QuickFixCmdPost *grep* cwindowA continuación puedes ver ejemplos de
:Ggrep configfuente
EDITAR: Después de leer su comentario, me doy cuenta de que inicialmente no entendí la pregunta. Aquí hay un script simple que toma su término de búsqueda como argumento y le solicita la ruta de búsqueda. Si el resultado se encuentra en un solo archivo, abre el archivo para editarlo en la ubicación del resultado de búsqueda.
fuente
@devnull obtuvo la respuesta correcta en este comentario:
fuente
Para ampliar la respuesta de Anthon para un caso en el que tiene más de una coincidencia, puede ser útil en algunos casos usar
head -1(de esta respuesta ) para seleccionar solo el primer resultado:vim "$(grep -l STRING FILES|head -1)"fuente
Si está ejecutando un comando largo que tiene grep en algún lugar en el medio, también puede hacer
fuente