Dado el resultado de grep -n, ¿cómo puedo abrir vim en esa línea específica? (usando solo el teclado)

9

Cuando corro grep "keyword" -ny obtengo la siguiente lista de resultados:

a/b/c:10:    keyword
a/b/c:70:    keyword
a/b/d:50:    keyword

¿Cómo puedo abrir uno de los archivos (digamos el segundo en la lista) en la línea que encontró?

Ahora solo copie la salida con el mouse y la copie después vimy luego agregue +con el número de línea que copio. (lo que significa que escribo vim a/b/c +70usando la copia del mouse para obtener el nombre del archivo, y otra copia del mouse para obtener el número de línea [o simplemente lo copio a mano, cuando es lo suficientemente corto])

¿Hay alguna manera de hacerlo con un atajo de teclado?

CIsForCookies
fuente
Usted puede intentar algo así: echo a/b/c:70: keyword | awk '{print $1}' | sed 's,:$,,' | sed 's,:, +,' | xargs vim && reset.
Arkadiusz Drabczyk
2
Además, si está interesado en utilizar Vim de manera más eficiente, consulte el sitio dedicado de intercambio de pila Vi y Vim .
muru

Respuestas:

14

Dos cosas:

  1. Vim tiene algo de apoyo para grep.

    Si abre Vim, y lo hace :grep keyword ..., Vim completa la lista de soluciones rápidas con los resultados y salta al primer archivo. A continuación, puede saltar a la n º quickfix entrada con :cc n(y otros comandos).

  2. Puede completar la lista de soluciones rápidas antes mencionadas utilizando la salida de grep:

    vim -q <(grep -n keyword ...)
    

    Y luego use los comandos de navegación de revisión rápida mencionados anteriormente.

Cualquiera de los dos es más simple que jugar manualmente con la salida de grep.

Como alternativa a (2), puede guardar la salida de grep en un archivo y utilizar ese archivo, si cree que no necesariamente abrirá Vim después de:

grep ... | tee log
vim -q log
muru
fuente
Tratando de usar el mismo método en el estado de git, sin éxito :( - vim -q <(estado de git | grep modificado)
CIsForCookies
3
@CIsForCookies Eso no estará en el mismo formato que grep -n( <filename>:<line>: ...). Uso el complemento fugitivo para Git, y luego es cuestión de :Gstatusmoverme al archivo deseado y presionar Enter.
muru
Por cierto, edité mi ~ / .bashrc grep alias para usar colores siempre, y eso, por alguna razón, rompió la -q >()opción ...
CIsForCookies
2

Podrías hacerlo si no hubiera soporte para grep ya que @muru respondió:

:cexpr system("grep -n keyword")

Se puede usar con otro comando, git greppor ejemplo.

Además, puede abrir la salida en un búfer y usar "cbuffer" en él.

Consulte la sección de revisión rápida del manual al respecto.

max630
fuente