2010-06-07 15 views

Respuesta

9

Vim tiene una función str2nr() para convertir representaciones numéricas diferentes a sus valores decimales. Para convertir valores hexadecimales se podía utilizar de esta manera:

s/0x[0-9a-fA-F]\+/\=str2nr(submatch(0), 16) 
+0

oh. Muchas gracias y tu método es bastante útil. pero si hay [a-f] en la instrucción, el método falla. – stefanzweig

+0

@stefan: Oops, sí, por supuesto :), debería extender el partido para incluir también esos personajes ... – sth

+0

Muchas gracias. Funciona definitivamente – stefanzweig

2

Su código es casi bien, pero, de acuerdo con la documentación:

Cuando la cadena de sustitución inicia con "\ =" del resto se interpreta como una expresión . Esto no funciona recursivamente: una función sustituta() dentro de la expresión no puede usar "\ =" para la cadena sustituta.

Por lo tanto, es posible cambiar el código para

%s/\(.*\) = \(.*\)/\=submatch(1)." = ".printf("%d", submatch(2)) 
+0

Hola ZyX, Muchas gracias. Voy a probar tu método. Ahora tengo una buena forma de convertir mis registros. :-) – stefanzweig

+1

si no cambia nada en la primera mitad (solo coincide), le recomendamos usar '\ zs' para cambiar el origen de la cadena reemplazada: – rampion

+0

'% s/pad (. *) = \ zs0x [0-9a-fA-F] \ +/\ = print ("% d", submatch (2)) ' – rampion

Cuestiones relacionadas