regulares expresiones regex vim capturing-group regex-group

expresiones - Grupos de captura Vim Regex



vim grep regex (4)

Tengo una lista de palabras:

bau ceu diu fou gau

Quiero convertir esa lista en:

byau cyeu dyiu fyou gyau

Intenté el comando:

:%s/(/w)(/w/w)//1y/2/g

¿Qué tengo que cambiar para que los grupos de captura funcionen en Vim?


Si no quiere escapar de los grupos de captura con barras diagonales inversas (esto es lo que se ha perdido), anteponga /v para convertir el motor de expresiones regulares de Vim en un modo muy mágico :

:%s//v(/w)(/w/w)//1y/2/g


También debes escapar de la paranthesis Agrupación:

:%s//(/w/)/(/w/w/)//1y/2/g

Eso hace el truco.


También puedes usar este patrón que es más corto:

:%s/^./&y

  • %s aplica el patrón a todo el archivo.
  • ^. coincide con el primer personaje de la línea.
  • &y agrega la y después del patrón.

Una forma de solucionar esto es asegurando que el patrón esté rodeado por paréntesis escapados :

:%s//(/w/)/(/w/w/)//1y/2/g

Un poco más corto (y más mágico -al) es usar /v , lo que significa que en el patrón después de todo, los caracteres ASCII excepto ''0''-''9'' , ''a''-''z'' , ''A''-''Z'' y ''_'' tiene un significado especial:

:%s//v(/w)(/w/w)//1y/2/g

Ver: