2010-06-10 33 views
25

Estoy siendo un idiota.regex carácter unicode en vim

Alguien cortó y pegó texto de Microsoft Word en mis adorables archivos html.

ahora tengo estos caracteres Unicode en lugar de símbolos de cotización regulares, (es decir, cotizaciones aparecen como < 92> en el texto)

que quiero hacer una expresión regular reemplazar pero estoy teniendo problemas para seleccionarlos.

:%s/\u92/'/g 
:%s/\u5C/'/g 
:%s/\x92/'/g 
:%s/\x5C/'/g 

... all fail. Mi google-fu me ha fallado.

Respuesta

47

De :help regexp (ligeramente editado), es necesario utilizar una sintaxis específica para seleccionar caracteres Unicode con una expresión regular en Vim:

\%u match specified multibyte character (eg \%u20ac) 

Es decir, para buscar el carácter Unicode con el código hexadecimal 20AC, introducirlo en su patrón de búsqueda:

\%u20ac 

La tabla completa de los patrones de búsqueda de caracteres incluye algunas opciones adicionales:

\%d match specified decimal character (eg \%d123) 
\%x match specified hex character (eg \%x2a) 
\%o match specified octal character (eg \%o040) 
\%u match specified multibyte character (eg \%u20ac) 
\%U match specified large multibyte character (eg \%U12345678) 
+1

gracias! "rtfm" como dicen ... :) – aidan

+0

Gracias por ayudarme a encontrar la parte correcta de la (muy, muy larga) documentación de expresiones regulares en vim, y veo que mucha gente ha votado positivamente, pero no estoy de acuerdo. Simplemente pegando en pocas líneas la documentación sin contexto hace que esta respuesta no sea útil. Incluir las tres columnas de la izquierda es simplemente confuso, especialmente sin los títulos de las columnas (que son irrelevantes aquí). No tengo idea de qué se supone que este pequeño contexto significa "|/... |". No aparece en mi ayuda de vim. La parte realmente útil de la respuesta es esta: "(por ejemplo, \% u20ac)". Hay que mirar con cuidado para encontrarlo. – Mars

+0

@Mars: debe editar la respuesta para que sea más útil. ¡Se recomienda editar en Desbordamiento de pila! – michaelmichael