tutorial comandos vim binary hexdump

comandos - ¿Saltar a la dirección de bytes en vim?



vim linux (3)

Sí hay. Es el comando de modo normal go .

Desde :h go :

[count] go Ir a {count} byte en el búfer.

Por ejemplo, 42go salta al byte 42.

Para saltar a una dirección hexadecimal u octal necesitaría construir un comando con :normal! go :normal! go o su equivalente :goto , y la función str2nr() o printf() .

:exe ''normal! '' . str2nr(''0x2a'', 16) . ''go'' :exe ''goto'' str2nr(''0x2a'', 16)

Estoy investigando un archivo principalmente UTF-8 con muchas líneas largas. Sin embargo, el archivo no es completamente de texto, hay algo de basura. Para encontrar mi punto de interés, estoy usando hd y grep .

Entonces, en algún momento, sé que me interesa, por ejemplo, 0000301a, así que quiero abrir rápidamente el archivo en Vim y saltar a esa posición.

Ejemplo (en realidad, un archivo pequeño, aquí el puesto es 0000001c):

me@here:~$ hd file | grep -C 10 / 00/ 00000000 6c 69 6e 65 31 0a 6c 69 6e 65 32 0a 6c 69 6e 65 |line1.line2.line| 00000010 33 0a 6c 69 6e 65 34 0a 6c 69 6e 65 00 35 0a 6c |3.line4.line.5.l| 00000020 69 6e 65 36 0a 6c 69 6e 65 37 0a 6c 69 6e 65 38 |ine6.line7.line8| 00000030 0a 6c 69 6e 65 39 0a 6c 69 6e 65 31 30 0a |.line9.line10.| 0000003e me@here:~$

¿Hay un truco en Vim para saltar a una posición de byte ? ¿O tan cerca como sea posible?


Sí, usando :help starting.txt puede encontrar la ayuda sobre todos los argumentos de la línea de comandos vim.

Usando el comando goto anterior dado por varios otros, debería poder darle a vim un comando desde la línea de comando para ir al desplazamiento de bytes tal como

vim "+exe ''goto'' str2nr(''0x2a'', 16)" file

Hay un indicador de tiempo de compilación que se describe en :help +byte_offset puede verificar el uso del comando :ve . Mi versión de Ubuntu lo tiene compilado por defecto.


Si bien esta pregunta tiene sus propios méritos, ¿puedo sugerir que estás haciendo todo esto de una manera bastante indirecta, usando todo hd , grep , Vim y el caparazón?

¿Por qué no usar Vim y solo Vim durante todo el proceso?

La clave está en :h 23.4 , "Archivos binarios": Vim puede ser su editor hexadecimal.

Después de iniciar Vim con su archivo, vim -b myfile , el flujo de trabajo se convierte en:

:%!xxd -g1<Enter> /00 <Enter> ... ... :%!xxd -r<Enter>

Asegúrese de leer :h hex-editing , también, para más detalles.