Tengo una lista de palabras:
bau
ceu
diu
fou
gau
Quiero convertir esa lista en:
byau
cyeu
dyiu
fyou
gyau
Intenté sin éxito el comando:
:%s/(\w)(\w\w)/\1y\2/g
Dado que esto no funciona, ¿qué debo cambiar para que los grupos de captura de expresiones regulares funcionen en Vim?
regex
vim
capturing-group
regex-group
cristiano
fuente
fuente
:%norm ay<CR>
.l
, ingresar al modo Bloque visual conCtrl+v
, marcar la columna completa conShift+g
seguido del
, luego ingresar al modo Insertar conShift+i
e ingresar 'y'. 7 pulsaciones de teclas, incluido el acabadoEsc
para salir del modo Insertar. No publica como respuesta porque no se trata realmente de grupos de captura (que es lo que busqué cuando encontré esto). :-)Respuestas:
Una forma de solucionar esto es, garantizando el patrón está rodeada por escapado paréntesis:
Ligeramente más corto (y más mágica -al) es utilizar
\v
, lo que significa que en el patrón después de que todos los caracteres ASCII, excepto'0'-'9'
,'a'-'z'
,'A'-'Z'
y'_'
tiene un significado especial:Ver:
:help \(
:help \v
fuente
Si no quiere escapar de los grupos de captura con barras invertidas (esto es lo que se ha perdido), preponga
\v
convertir el motor de expresión regular de Vim en un modo muy mágico :fuente
:exmode
; ¿Hay alguna manera de hacerlo en el cuadro de diálogo Buscar / reemplazar gvim?\v...
regexp work find; en la cadena de reemplazo,&
funciona pero\
está protegido (\1\r
se pierde):s
) a través deinputdialog()
y un poco de Vimscript.\1 \r
tratamiento es un error de gvim. Intentaré publicarlo en alguna lista específica de vim. Mientras tanto, intentaré mi único vimscript-inputdialog.También puede usar este patrón que es más corto:
%s
aplica el patrón a todo el archivo.^.
coincide con el primer caracter de la línea.&y
agrega ely
después del patrón.fuente
También debes escapar de la parálisis de agrupación:
Eso hace el truco.
fuente