En vim, a veces tengo la oportunidad de reemplazar las primeras apariciones de un partido en una línea, pero no todas las que quisiera lo g
harían. p.ej:
a a a a a
a
b b b a a
Sé que podría usar :s/a/b/[enter]:[up][enter]:[up][enter]
, pero eso es bastante tedioso en tres repeticiones, tengo líneas con potencialmente más de 10 sustituciones.
He intentado:
:s/a/b/3g
: vim se quejó de los caracteres finales.:s/a/b/3
: cambia la primera aparición en esta y las siguientes dos líneas.3:s/a/b
: Igual que el anterior.:s/a/b/g3
: cambia todas las apariciones en esta y las dos líneas siguientes.:3s/a/b
: cambia la primera aparición en la línea 3.:/a/,3/a/s/a/b
: cambia la primera aparición en cada línea entre la siguientea
y la tercera línea que contienea
el archivo (solicitando revertir si es necesario).:/a/,/\([^a]*a\)\{3\}/s/a/b/
: cambia la primera aparición en cada línea entre esta y la siguiente con 3a
s (y esto no habría sido fácilmente extensible a una búsqueda de varios caracteres).
Y varios otros patrones de direccionamiento, ninguno de los cuales funcionó. Debo decir que he aprendido bastante sobre el :s
comando que intenta encontrar una respuesta a este problema, pero aún no lo he resuelto.
Alguien sabe cómo hacer esto?
(puntos de bonificación para un rango específico, por ejemplo, del segundo al cuarto caso)
n
y .
, aunque no pensé en usarlos aquí. Sin duda una mejora, gracias.
s/a/=something/
debería hacer el truco ( :help sub-replace-=
). No soy lo suficientemente fluido en Vim para escribir de something
inmediato.
:[up][enter]
se puede reemplazar con &
, lo que aún no es ideal, pero al menos es menos doloroso.