2009-07-13 27 views

Respuesta

38

Uso printf (análogo a C de sprintf) con el comando \= para manejar el reemplazo:

:%s/\d\+/\=printf("0x%04x", submatch(0)) 

detalles:

  • :%s/\d\+/: Al menos uno o más dígitos (\d\+) en cualquier línea (:%) y sustituto (s).
  • \=: para cada partido, reemplazar con el resultado de la siguiente expresión:
  • printf("0x%04x",: producir una cadena utilizando el formato "0x%04x", que corresponde a un literal 0x seguido por una de cuatro dígitos (o más) número hexadecimal, acolchado con ceros.
  • submatch(0): El resultado de la coincidencia completa (es decir, el número).

Para obtener más información, consulte:

:help printf() 
:help submatch() 
:help sub-replace-special 
:help :s 
+0

+1 nice (... y los 15 caracteres restantes) – stefanB

+0

funciona bien, tenga en cuenta que si sus enteros contienen valores negativos, lo necesitará antes de su búsqueda apropiadamente 's/- \? \ D \ +/\ = printf ("0x% 08x", subcompartido (0)) 'y elimine el' 0xffff's adicional según sea necesario: por ejemplo 's/0xffffffff/0x' para 32bit. – Orwellophile

5

de otra manera, para pasarlo a awk

awk '{printf "0x%x\n",$1}' file 
4

Select (visual) del bloque de líneas que contiene los números y, a continuación:

:!perl -ne 'printf "0x\%x\n", $_' 
+1

¿Por qué utilizar Perl cuando Vim tiene una impresión interna? – DrAl

6

embargo, otra forma:

:rubydo $_ = '0x%x' % $_ 

O:

:perldo $_ = sprintf '0x%x', $_ 

Esto es un poco menos escribir y a evitar un nivel de citar/escapar de shell que obtendrías si lo hicieras a través del :! . Necesita el soporte de Perl/Ruby compilado en su Vim.

+1

Y es más fácil que recordar cómo usar Vimscript, si (como la mayoría de las personas) lo usa con mucha menos frecuencia que Perl y Ruby. – ephemient

1

Para convertir un decimal en hexadecimal, utilice el comando está visualizando

:echo printf("%x", decimal) 

Esto se traduce en el equivalente hexadecimal de decimal.

Ejemplo:

:echo printf("%x", 61444) 

F004 (equivalente a 61.444) se visualiza.

Esto no encontrará ni reemplazará 61444 en el archivo.

Cuestiones relacionadas