Hacer coincidir palabras que contengan caracteres más allá de a-zA-Z

15

Para unir una palabra, se puede usar

\v(\w+)

De la ayuda vim :h \w:

\ w carácter de palabra: [0-9A-Za-z_]

Esto funciona exactamente como se describe en el manual. Sin embargo, quiero hacer coincidir las palabras que contienen caracteres más allá a-z, por ejemplo, prästgården . Hacer coincidir la expresión regular \v(\w+)con prästgården produce tres coincidencias:

prästgården
^^ ^^^ ^^^^

¿Cómo unir palabras que contienen caracteres más allá a-z? Mi configuración regional está configurada en inglés y, si es posible, me gustaría mantenerla así.

Editar: las palabras pueden no pertenecer a una sola configuración regional, por ejemplo

prästgården
treść
Marco
fuente
[[:alpha:]]\+Se supone que las clases de caracteres POSIX (por ejemplo, en este caso) hacen lo que usted desea aquí, pero de acuerdo con los documentos de Vim ( :help regex) no: "Estos elementos solo funcionan para caracteres de 8 bits". Sí funciona aquí con Vim 7.3 en OS X 10.8, pero Vim 7.3 en Linux no funciona, así que supongo que hay algo específico de Apple en este Vim que lo permite. También descubrirá que hacerlo a través del enlace Vim Perl también falla, a pesar de que Perl tiene un muy buen soporte Unicode. Es posible que deba cambiar a un script Perl externo, para que pueda activar el soporte completo de Unicode.
Warren Young
Por cierto, si va con Perl, desea usar en \p{Word}lugar de una clase de caracteres POSIX. Hay muchos casos de excepción en el manejo de la clase de caracteres POSIX de Perl, que evita cuando utiliza las propiedades Unicode.
Warren Young

Respuestas:

9

Vim (a partir de la versión 7.3) es muy limitado con respecto al soporte de caracteres no ASCII en los patrones. En particular, \wsolo coincide con letras ASCII, lo cual es de utilidad limitada.

Hay algunos patrones de clase de caracteres que admiten Unicode. Es de interés para usted \I, que en general coincide con letras y solo letras, más _y @. Al menos en la compresión de Debian (en un entorno local UTF-8), hay errores; por ejemplo, ×y ÷coinciden como letras, pero todas las letras latinas acentuadas parecen reconocerse correctamente. \Ise puede configurar a través de la isidentopción, al menos para la parte ASCII.

Si desea un soporte serio de Unicode, deberá confiar en una herramienta externa. Por ejemplo, perl -C -e '/\p{L}/'para que coincida con las letras UTF-8 (suponiendo un entorno local UTF-8).

Gilles 'SO- deja de ser malvado'
fuente
2

Funciona también para cirílico

\v\k

Un poco más complicado y falla con cirílico

\v(\c[0-9a-z_[=a=][=c=][=e=][=i=][=l=][=n=][=o=][=r=][=s=][=t=][=u=][=y=][=z=]])

Doc .

Probado en Vim 7.4.

pevik
fuente
Agregaría [=l=]a la lista que cubriríał (por ejemplo, złoty), etc. también. Pero esto ya falla para Rusia. De todos modos, gracias por compartir.
Marco