Esta pregunta es casi idéntica a this question, excepto que tengo que ir a tres espacios (directrices de codificación de la empresa) en lugar de a cuatro y la solución aceptada solo duplicará el patrón coincidente. Aquí estaba mi primer intento:¿Cómo volver a formatear un archivo fuente para pasar de 2 espacios a 3?
:%s/^\(\s\s\)\+/\1 /gc
Pero esto no funciona porque cuatro espacios se reemplazan por tres. Así que creo que lo que necesito es una forma de calcular cuántas veces el patrón coincide con "+" y usar ese número para crear el otro lado de la sustitución, pero creo que esta funcionalidad probablemente no esté disponible en la expresión regular de Vim (Let yo sé si crees que podría ser posible).
También he intentado hacer la sustitución de forma manual mediante la sustitución de los guiones más grandes primero y luego el siguiente guión más pequeña hasta que llegué todo convertida pero esto era difícil seguir la pista de los espacios:
:%s/^ \(\S\)/ \1/gc
podría enviar a través de Perl, ya que parece que Perl podría tener la capacidad de hacerlo con su Extended Patterns. Pero no pude hacer que funcionara con mi versión de Perl. Aquí fue mi intento de tratar de contar una de:
:%!perl -pe 'm<(?{ $cnt = 0 })(a(?{ local $cnt = $cnt + 1; }))*aaaa(?{ $res = $cnt })>x; print $res'
Mi último recurso será escribir un script en Perl para hacer la conversión, pero yo tenía la esperanza de una solución más general en Vim para que pudiera volver a utilizar la idea resolver otros problemas en el futuro
Es posible;) – Amadan
Gracias Amadan, marcado como respuesta correcta. Me pregunto si alguien me puede mostrar cómo se vería la solución si se enviara a través de Perl regex, ya que podría tener la necesidad de hacerlo en un script. – stephenmm
Relacionado: [Re-sangría de código con sangría grave] (http://vi.stackexchange.com/q/236/467) en Vim SE – kenorb