En un archivo largo, me gustaría buscar un patrón que coincida con aproximadamente 200 líneas más o menos. Las líneas coincidentes están en lugares aleatorios en el archivo.
Cuando una línea coincide, solo la línea en sí es relevante, sin contexto arriba o abajo.
Normalmente, buscaría /y saltaría a través de los partidos con n.
Pero eso significa que solo hay una o dos líneas relevantes en la pantalla a la vez.
¿Hay alguna manera de ocultar todas las líneas que no coinciden, mientras revisa la lista de líneas de resultados?
Un enfoque de fuerza bruta sería eliminar todas las líneas que no coinciden, y deshacer esa eliminación más tarde. Pero eso es feo de varias maneras, incluso si no terminara en un deshacer persistente ...

:vimgrepse puede abreviar a:vim:ccl[ose]o, sin embargo, normalmente cierra un búfer (por ejemplo, cambie a él y:bd). Puede volver a abrir el búfer de corrección rápida ejecutando:cw[indow]nuevamente, y usará sus últimos resultados de vimgrep.Puede enumerar todas las líneas coincidentes con
(El
:printcomando se puede omitir; es el valor predeterminado para:g).fuente
g/REgexp/p) ... El problema es que no puedes saltar fácilmente a uno de los partidos, aunque ...g. Supongo que es un patrón global. Por lo general, hago búsquedas de VI con una barra inclinada/patterny esto encontraría todos los sucesos. Uno puede navegar hacia ellos presionando la letran:g[lobal]que toma un patrón como argumento. Encontrará todos los detalles en:help :global.Puede usar las opciones
foldmethodyfoldexprpara plegar las líneas irrelevantes.Después de buscar, la última búsqueda se almacena en el
@/registro. Por lo tanto, puede plegar fácilmente todo lo que no coincida de esta manera (solo para coincidencias de una línea):Se pueden encontrar métodos más avanzados, como agregar múltiples niveles de plegado para líneas de contexto que puede mostrar u ocultar, o hacer coincidir varias líneas, en el Wiki de Vim Tips .
fuente
set foldlevel=0necesario? Pero tal vez eso es lo predeterminado.:tab spobtengo una nueva vista desechable en el archivo. Luego, regresar es tan simple como:closecualquier otra forma de eliminar la pestaña.Si el orden no importa, simplemente mueve las líneas.
Para más ayuda ver:
fuente
:g/pat/m$(mover las líneas coincidentes hasta el final) también está bien,[d] elija todas las líneas, no (!) patrones coincidentes:
o incluso más simple (gracias por los comentarios de 'B Layer'):
fuente
:vlugar de:g!. (¡No recuerdo la última vez que vi el último usado, TBH!)Si desea enumerar todas las líneas coincidentes (como en mi otra respuesta), y luego saltar a una coincidencia particular, mi complemento FindOccurrence proporciona una
[/asignación para eso (y[npara el último patrón de búsqueda, en lugar de buscar una).[/patternenumera como:g/pattern, pero luego pide el número del partido al que saltar.fuente
Otra forma es usar
:h :ilist, lo uso para obtener una visión general de la página de manual. su resultado se ve así:Aquí hay una pequeña función que le permite elegir ir a la línea de resultados por índice:
Se puede usar así:
fuente