2012-05-22 10 views
70

¿Hay algún comando en Vim/Vi para mover dentro de un segmento de búsqueda seleccionado?¿Hay un comando en Vim/Vi para mover el cursor al final de un resaltado de búsqueda?

Por ejemplo, si busco una palabra, ¿hay algún comando para mover el cursor hasta el final del segmento resaltado? Digamos que tengo una palabra, "FishTaco" y quiero buscar todas las instancias de "Fish" e insertar algo después de ella. Sé que podría hacer un reemplazo global, pero ¿qué sucede si solo quiero hacer el cambio en un par de instancias no secuenciales?

Pude ver dónde sería conveniente mover el cursor hasta el final del segmento resaltado actual para realizar una acción.

+0

Esto no es una respuesta a la pregunta, pero para lograr su objetivo final de la sustitución de todos los '' Fish' con FishTaco' , podrías hacer ':% s/Fish \ (Taco \) \ @!/& Taco /', que encontrará cada 'Fish' aún no seguido de' Taco' y lo reemplazará con 'FishTaco'. Combina una búsqueda de búsqueda negativa con un reemplazo que incluye el término coincidente seguido de 'Taco'. –

Respuesta

105

Puede hacerlo con esto:

/Fish/e

El /e al final aterriza el cursor al final de la región de búsqueda (en lugar del primer carácter por defecto

+22

Tenga en cuenta que puede agregar * + n * o * -n * para poner el cursor * n * caracteres antes o después del final. –

+10

+1 He estado usando vim durante 20 años desde que tenía 12 años pero todavía no sabía esto ... – Benj

+7

Merece la pena señalar que después de haber hecho la búsqueda '/ Fish' puede saltar hasta el final con' // e 'y de Vim 7.4 puede usar' gn' para resaltar visualmente el resultado encontrado. – smathy

68

Si. solo desea colocar el cursor después del último carácter de Fish, entonces puede usar

/Fish/e+1 

que colocará el cursor después de la h. (Sin el +1, el cursor terminará a la izquierda del último carácter.)

Si está interesado en colocar el cursor después de Fish, pero solo cuando aparece en "FishTaco", puede probar uno de los las siguientes opciones:

puede utilizar

/FishTaco/s+4 

y el cursor va a terminar entre los peces y Taco. El /s+4 coloca el cursor 4 lugares después del inicio del término de búsqueda.

Usted podría utilizar asimismo

/FishTaco/e-3 

que se coloque el cursor 3 lugares a la izquierda de la parte izquierda del último carácter (final).

También puede utilizar

/FishTaco/b+4 

porque /b+4 serán tratados como /s+4.

+10

Gran explicación, pero ahora solo tengo hambre. – kenny

11

Una vez que tiene una selección visual, puede usar o para alternar la posición del cursor entre el inicio y el final del bloque seleccionado. Cuando la selección es en línea, alterna la posición línea, lo que significa que el cursor se mueve a la línea inicial y final de la selección, pero no al carácter inicial o final. Cuando la selección tiene carácter, entonces el movimiento también es característico.

También puede usar `< y `> para alternar el cursor entre el inicio y el final del bloque visual, sin embargo, esto afecta la selección, por lo que se usa para restablecer o ajustar los límites de selección.

Editar: Ah, pero para los aspectos más destacados de búsqueda esto no funcionará, porque o iniciará una inserción de línea.Supongo que buscar resaltar no es lo mismo que una selección visual, lo siento :)

+0

Yo tampoco lo sabía. Esto es genial para modificar el comienzo de una selección sin comenzar de nuevo. (por ejemplo, usted comenzó la selección una palabra demasiado pronto o demasiado tarde) –

7

La parte del "cursor al final del partido" ya está respondida.

Puedes hacer :%s/Fish/FishTaco/c. Esto le da la oportunidad de confirmar o rechazar cada sustitución y omitir todo el asunto del "cursor al final del partido".

+0

Awesome tip. Si ingreso 'y', solo realiza el reemplazo en el primero. ¿Cómo hago que confirme para cada uno? –

+1

Pasa a la siguiente coincidencia y espera a que escriba 'y' o' n' y así sucesivamente hasta que no queden coincidencias. Para aceptar todas las sustituciones adicionales, escriba 'a', para rechazarlas, escriba' q'. – romainl

+0

En realidad, me faltaba la 'g' después del'/'final, por lo que no continuaba en mi línea. Gracias por el consejo. –

24

Si ya ha buscado /Fish, puede cambiar rápidamente la búsqueda para ir al final del partido a través de //e, que repite la última búsqueda, pero añade el modificador e que ya se ha explicado.

+1

¡el número // e + es exactamente lo que estaba buscando! increíble. – arkod

8

/ long-regexp1 \zs long-regexp2 /.. cursor se detendrá en \ zs, consulte: ayudar a \ ZS

Cuestiones relacionadas