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 gharí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 siguienteay la tercera línea que contieneael 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 3as (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 :scomando 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)
ny ., 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 somethinginmediato.
:[up][enter]se puede reemplazar con &, lo que aún no es ideal, pero al menos es menos doloroso.