2009-05-14 15 views
66

¿Es posible mostrar/ocultar todas las líneas coincidentes en vi o Vim? No resaltar, solo mostrar solo esas líneas.Ocultar todas (no) líneas coincidentes en Vim

Por ejemplo, tengo un texto con la palabra la palabra ERROR. ¿Cómo hago que muestre solo las líneas que contienen ERROR y cómo mostrar solo las líneas sin ERROR?

¿Hay una solución sin eliminar todas las líneas que coincidan y luego simplemente deshacerlo?

+0

http://vi.stackexchange.com/q/2280/12111 – graceman9

Respuesta

76

¿Te saber sobre el comando :global? ¿Hace esto lo que quieres?

:g/ERROR 

y por el contrario:

:g!/Error 

o equivalentemente:

:v/Error 
+14

Esto no es muy bueno. Una vez que te desplazas hacia abajo, el comando finaliza y todo vuelve a aparecer. En realidad, no está ocultando esos contenidos. –

42

Otro enfoque dependiendo de su caso de uso estaría utilizando vimgrep y sus resultados en quickfix. Puede hacer lo siguiente:

:vimgrep pattern % buscará el archivo actual y lo llevará al primer resultado de la búsqueda. Lo que es más importante, también pone los resultados en la "lista de soluciones rápidas".

:copen abrirá la lista de revisiones en otra ventana de solución rápida. Entonces tendrá una ventana separada con todas las líneas de su último vimgrep. Dentro de la ventana de revisión rápida, puede presionar Entrar o hacer doble clic en una línea para saltar a la línea correspondiente en su archivo original.

:colder le permitirá volver a listas de quickfix anteriores (resultados de vimgrep más antiguos). Y :cnewer avanza a los resultados de búsqueda más nuevos.

Tenga en cuenta que la lista de revisiones también se actualiza cuando se ejecuta :make (por lo que se llama quickfix para corregir errores). Debido a esto, también hay una alternativa a la lista de soluciones rápidas llamada "lista de ubicaciones". Para usarlo, en su lugar, usa :lvimgrep, luego use comandos con prefijo l en lugar de comandos con prefijo c - :lopen, :lolder, :lnewer.

Hay, por supuesto, mucho más que puede hacer. Vea :help quickfix para más información.

PS, Dijiste que no querías un enfoque que borre las líneas y luego las deshagas. Pero ya que marcó g/ERROR como la respuesta que pensé que señalaría de una manera rápida y sucia es hacer g!/ERROR/d. A continuación, puede deshacerlo fácilmente usando u. También para su información, puede hacer :set hlsearch para resaltar los patrones combinados con los comandos :g.

+0

Gracias por la sugerencia de ": g!/ERROR/d" mejor que la respuesta aceptada. – VinGarcia

0

Probablemente se refiere al comando en menos vi vim &/pattern/ que muestra líneas que contienen/pattern/(como grep).

12

La mejor manera de hacer esto es->

:vimgrep /something/g % | copen 

Esto abrirá la lista de resultados para la palabra clave y también mostrará solamente las líneas coincidentes en la ventana quickfix.

+0

Reemplace% con la ruta del archivo si no está considerando el archivo actual. – Shivendra

+0

muy útil !!!! ¡¡¡gracias!!! – ihightower

Cuestiones relacionadas