Tengo un archivo con una línea que se ve así:
foofoo.xy.barbar
Quiero cambiar el xy
a gh
. Traté de hacer 2r-> gh, pero obviamente eso no funcionó, ya que reemplazó xy
con gg
y luego moví mi cursor un punto hacia la izquierda.
¿Hay alguna manera de hacer esto sin ingresar al modo de inserción, o sin usar muchas más pulsaciones de teclas (por ejemplo :s/xy/gh/)?
replace
repeated-commands
durron597
fuente
fuente
R
entra en modo de reemplazo.:help replace-mode
para más información.vt.rgh
. Pero el resultado fue el mismo que el suyo excepto por la posición del cursor.cwgh<esc>
funcionaría bien.minimize-keystrokes
es una etiqueta bien, normalmente no es realmente lo que la pregunta es acerca de , como tal. (Rechacé tus ediciones propuestas) ... ¿Tal vez deberías discutir en meta?Respuestas:
Si el nuevo texto tiene la misma longitud que el texto anterior, el modo de reemplazo de Vim es una opción. Desde el modo normal, R(que es una "r" mayúscula) lo lleva al modo de reemplazo. Esto es similar a "sobrescribir" en algunos otros editores de texto: en lugar de insertar nuevos caracteres como en el modo de inserción, la escritura reemplazará el carácter debajo del cursor y luego avanzará al siguiente cursor. (Piense en minúsculas
r
, pero para más de un solo carácter a la vez). Busque la documentación para el modo de reemplazo con:help replace-mode
.En su caso: con el cursor entre el
.
y elx
, ingrese al modo de reemplazo presionando R. Ahora, cuando escribe g, reemplaza la "x" y pasa al siguiente carácter, por lo que puede escribir hpara reemplazar la "y". Su edición está hecha ahora, Escapepara volver al modo normal.(Esto funciona cuando su texto de reemplazo tiene la misma longitud que el texto anterior, pero si su reemplazo es más largo o más corto,
c
podría ser todo lo que necesita: reemplazará 1 el texto dentro de un movimiento, con el texto que luego escribe. muchas maneras de hacer usoc
, por ejemplo: con el cursor entre el.
yx
, ct.ABC
Escapedice a c ambiar el texto (hasta ' t il siguiente.
) con 'ABC').1 Tirará del texto en el movimiento hacia el nombre /
"
registro sin nombre y luego cambiará al modo de inserción, para que pueda escribir algo para reemplazarlo, y luego Escapevolver al modo normal.fuente
n
para reemplazar hasta lan
enésima aparición del personaje objetivo. Esto es útil para reemplazar partes de etiquetas con el formatow_x_y_z
ya-b-c-d
. Use enf
lugar det
eliminar también el carácter limitante.Hay un par de formas en que podría hacer esto, pero la más simple que se me ocurre es:
TL; DR
fxcw<REPLACEMENT TEXT>
Explicación
fx
te salta a la x (verhelp *f*
)cw
dice cambiar la palabra (ver:h *c*
,:help *w*
y:help cw
para más información), eliminar el texto "xy" e ingresar al modo de inserción, permitiéndole poner lo que quiera allí mismo.Una ventaja de este enfoque es que utiliza comandos de navegación y manipulación de texto muy utilizados. Otra es que "xy" podría ser de cualquier longitud, y esto aún funcionaría.
Las
cw
obras porque el objeto de texto está rodeado por puntos (.
), que actúan como un límite a la palabra.Si su cursor ya está en el carácter "y" (o cualquier carácter en el texto que se va a reemplazar), puede usarlo
ciw<REPLACEMENT TEXT>
. Esto le dice a vim que cambie la palabra en la que se encuentra, incluso si no está al principio. Consulte:help text-objects
para obtener más informaciónciw
y objetos de texto en general.fuente
Modo de reemplazo:
es la solución más obvia si el reemplazo tiene la misma longitud que el original pero también puede hacer:
o:
fuente