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
vim
a leerSTDIN
:grep foo | vim -
Respuestas:
Úselo
grep -l
para obtener el nombre del archivo correspondiente y no el texto correspondiente, luego combínelo convim
:fuente
-q
flag ofgrep
para asegurarse de que grep haya resultado en algún archivo coincidente:grep -q patterns fnames && vim $(grep -l pattern fnames)
vi
se queja, el PO no.Puede usar
quickfix
oerrorfile
presentar envim
:Vim abrirá el primer archivo
/tmp/foo.list
y colocará el cursor directamente en la línea dondefoo
se encontró. Puede ir a la siguiente instancia usando:cn
y la instancia anterior usando:cp
.Nota al margen : si ya está utilizando
vim
ogvim
, entonces sugeriría usar sugrep
funcionalidad incorporada . Leer:help vimgrep
para más información.fuente
Para buscar en el proyecto no es necesario dejar vim con Fugitive
autocmd QuickFixCmdPost *grep* cwindow
A continuación puedes ver ejemplos de
:Ggrep config
fuente
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