2010-07-16 16 views
29

Sé que con la sustitución de comandos de Vim puede específica una serie de líneas:VIM: ¿Buscar solo entre números de línea específicos?

:12,24s/search/replace 

que desea ser capaz de especificar un rango con las búsquedas normales. no parece algo así como

:12,24/search 

Desde que trabajar (al menos en mi configuración de Vim), ¿alguien sabe cómo lograr esto?

Gracias.

Respuesta

24
:help search-range 

y luego

:help /\%>l 

tan esencialmente:

/\%>12l\%<24lsearch 
+0

no veo lo que esto se suma a la: iniciar, detener/patrón/s/TGT/repl/pattern ofrecido por Carl. – chernevik

+7

@chernevik: verifique la marca de tiempo de las respuestas. – akira

+0

^Para la 'forma correcta'. Vim puede dar muchas maneras de lograr una tarea. – 0xc0de

32

Gran respuesta de Akira. Pero después de excavar, encontré una alternativa. No es tan elegante, pero más fácil de escribir:

:12,24g/search/ 

Esto le dará una pronta molesto, pero que va a terminar en la primera línea dentro del rango que contiene la cadena buscada.

+0

Esto funcionó para mí sin ninguna molestia inmediata. Entonces el comando << 195,208g/print/s/$/# debug/>> anexó '# debug' a las líneas que contienen 'print' de 195 a 208, y solo esas líneas. Tal vez un problema de versión? Estoy usando VIM 7.2.330. – chernevik

+0

7.3 aquí, y dice 'Presione ENTER o escriba command para continuar. 'No estoy lo suficientemente bien versado en vim para decir de dónde pueden venir las diferencias. –

16

¿Realmente necesita los números de línea? Otra forma podría ser seleccionar el rango visualmente.

  1. seleccione el rango usando v, V o lo que sea
  2. presione ESC para cancelar la selección de la gama
  3. búsqueda usando /\%Vwhat_to_search buscar 'what_to_search' en la gama seleccionada previamente.

Ésta es menor que escribir, pero no directamente lo que han pedido ;-)

Ver: ayuda% V

[EDIT] Grande, simplemente he aprendido que la gama para buscar in se puede cambiar después de hacer la búsqueda seleccionando otro rango, deseleccionando nuevamente este rango presionando ESC y presionando n para repetir la búsqueda. Vim realmente siempre es bueno para sorpresas agradables.

15

Siga usando el comando de sustitución, pero añada las banderas gc al ejemplo original.

:12,24s/search//gc

De :help search-range

[Para buscar dentro de un rango] utilice el : comando con la 'c' bandera "sustituto".

Ejemplo: :.,300s/Pattern//gc

Este comando buscará desde la posición del cursor hasta que la línea 300 para "patrón".En el partido, puede escribir 'q' para detener o 'n' para buscar la siguiente coincidencia .

3

si hay marcas dicen a y b, entonces la búsqueda se puede limitar a la región entre A y B usando

/\%>'a\%<'bSearchText 

Esto se puede simplificar con un CMAP

cmap vmsab /\%>'a\%<'b 
cmap vmscd /\%>'c\%<'d 
0

Uso Narrow Region plugin podemos abrir un búfer temporal con el rango que necesitamos para buscar o cambiar

:900,1000NarrowRegion 

entonces podemos meke una búsqueda

/thing 

o un cambio y escribir el búfer de reserva

:%s/this/that/g 
:wq 
Cuestiones relacionadas