¿Hay algún comando en Vim / Vi para moverse dentro de un segmento de búsqueda seleccionado?
Por ejemplo, si busco una palabra, ¿hay algún comando para mover el cursor al final del segmento resaltado? Digamos que tengo una palabra, "FishTaco" y quiero buscar todas las instancias de "Fish" e insertar algo después. Sé que podría hacer un reemplazo global, pero ¿qué pasa si solo quiero hacer el cambio en un par de instancias no secuenciales?
Pude ver dónde sería conveniente poder mover el cursor al final del segmento resaltado actual para realizar una acción.
Fish
conFishTaco
, podría hacer:%s/Fish\(Taco\)\@!/&Taco/
, que buscará todos los queFish
no hayan seguidoTaco
y lo reemplazará conFishTaco
. Combina una búsqueda anticipada negativa con un reemplazo que incluye el término coincidente seguido deTaco
.Respuestas:
Puedes hacerlo con esto:
/Fish/e
El
/e
al final coloca el cursor al final de la región de búsqueda (en lugar del primer carácter por defecto.fuente
/Fish
búsqueda, puede saltar al final con//e
y desde Vim 7.4 puede usargn
para resaltar visualmente el resultado encontrado.Si solo desea colocar el cursor después del último carácter de Fish, puede usar
que colocará el cursor después de la h. (Sin el,
+1
el cursor terminará a la izquierda del último carácter).Si está particularmente interesado en colocar el cursor después de Fish, pero solo cuando aparece en "FishTaco", puede probar una de las siguientes opciones:
Puedes usar
y su cursor terminará entre Fish y Taco. los
/s+4
coloca el cursor 4 lugares después del inicio del término de búsqueda.También podrías usar
que colocará el cursor 3 lugares a la izquierda del lado izquierdo del último carácter (final).
También puedes usar
porque
/b+4
será tratado como/s+4
.fuente
Si ya ha buscado
/Fish
, puede cambiar rápidamente la búsqueda para ir al final de la partida a través de//e
, que repite la última búsqueda, pero agrega ele
modificador que ya se explicó.fuente
/ long-regexp1 \zs long-regexp2 /
.. el cursor se detendrá en \ zs , consulte: ayuda \ zsfuente
Una vez que tenga 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, esto alterna la línea posición , 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 se basa en caracteres, el movimiento también se basa en caracteres.También puede utilizar
`<
y`>
para alternar el cursor entre el inicio y el final del bloque visual; sin embargo, esto afecta la selección en sí, por lo que se usa para restablecer o ajustar los límites de la selección.Editar: Ah, pero para los aspectos destacados de la búsqueda esto no funcionará, porque
o
iniciará una inserción de línea. Supongo que el resaltado de búsqueda no es lo mismo que una selección visual, lo siento :)fuente
La parte del "cursor al final del partido" de su pregunta ya está respondida.
Puede 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".fuente
y
on
y así sucesivamente hasta que no haya partidos que quedan. Para aceptar todas las sustituciones adicionales, escribaa
, para rechazarlas, escribaq
.g
después de la final,/
así que no continuaba en mi línea. Gracias por el consejo.