¿Cómo cambiar selectivamente una cadena resaltada?

11

Al buscar, he resaltado la cadena que quiero cambiar. Ahora quiero reemplazar solo el texto resaltado. Estoy usando npara avanzar a la siguiente instancia de la cadena de búsqueda. Estaba pensando que podría hacer algo como ciweso, pero eso cambia la palabra completa no solo el texto resaltado.

Estoy familiarizado :%s/old/new/gpero no quiero cambiar todas las instancias. En cambio, quiero avanzar mi cursor a cada instancia y luego decidir si cambiarlo.

zundarz
fuente

Respuestas:

16

Use el gnmovimiento para editar la búsqueda actual. El siguiente ejemplo cambiará la coincidencia actual a "FooBar":

cgnFooBar

La gran parte de esta técnica es que puede repetir el cambio a través de .. Asumiendo que la próxima partida cambiará de la misma manera que puede usar .para repetir. O saltee algunas coincidencias vía ny luego use ..

Vimcasts tiene un buen episodio sobre este asunto: operar en coincidencias de búsqueda usando gn

Para más ayuda ver:

:h gn
Peter Rincker
fuente
Este es definitivamente el camino a seguir cuando tiene diferentes cadenas de reemplazo que necesita usar en diferentes lugares. No estoy seguro de los matices del modo visual que parecen ser invocados gn, así que aquí hay un método similar que acabo de descubrir:c//e<CR>FooBar<Esc>//<CR>
Jeff
¿Hay alguna manera de cambiar todas las selecciones / coincidencias a la vez? Básicamente, para refactorizar?
Geremia
@Geremia, sí, :%s/oldtext/newstuff/gcambiará todos los partidos de oldtexta newstuff.
zundarz
@zundarz No quiero hacer una expresión regular, sino solo reemplazar nombres de variables. En lugar de golpear .varias veces, puedo usar :%norm .( fuente ).
Geremia
7

Si ya buscó una palabra con /wordo ?word.

Puede usar :%s//newword/gcpara reemplazar la palabra que buscó anteriormente newword, dejando s//..vacío el término de búsqueda ( ).

La cbandera dice que cada cambio debe confirmarse presionando ysí o nno.

Echa un vistazo :help :s_flagspara obtener más información sobre la bandera de confirmación.

Raphael Ahrens
fuente
1
Sé que dijo que mirar la ayuda, pero es posible que mencionar también expresamente también puede pulsar l, ay q(o <Esc>) para ver diferentes formas para concluir el ciclo de confirmación.
Jeff
2

Método 1

Puede aprovechar las asignaciones gny gNpara lograr lo que desea. gnbuscará el último término de búsqueda utilizado y seleccionará visualmente la coincidencia. gNhace exactamente lo mismo, excepto que busca hacia atrás. Cuando se combina con un operador como c, el operador se aplicará a la coincidencia. Por ejemplo, si su última cadena de búsqueda es "foo" y usted escribe cgn, buscará la siguiente instancia de "foo", la borrará y ponerlo en modo de inserción para ingresar el texto de reemplazo.

Para más información sobre estos, vea :help gny :help gN.

Método 2

Puedes usar el :substitutecomando con la cbandera. Esto le pedirá que confirme cada sustitución. Por ejemplo, supongamos que desea reemplazar foo con barra en todo el archivo, pero desea confirmar cada reemplazo:

:%s/foo/bar/gc

Para más información sobre este tema, consulte estos temas: :help :s_flags, :help cmdline-ranges, y :help :substitute.

Árbol de hoja perenne
fuente