Подтвердить что ты не робот

Перейти к байтовому адресу в vim?

Я изучаю файл UTF-8, в котором много длинних строк. Однако файл не является полностью текстовым файлом, есть мусор. Чтобы найти свою точку зрения, я использую hd и grep.

Итак, в какой-то момент я знаю, что это интересно, например. 0000301a, поэтому я хочу быстро открыть файл в Vim и перейти к этой позиции.

Пример (на самом деле крошечный файл, здесь позиция 0000001c):

[email protected]:~$ 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
[email protected]:~$ 

Есть ли в Vim трюк, чтобы перейти к позиции байта? Или как можно ближе?

4b9b3361

Ответ 1

Да, есть. Это команда нормального режима go.

Из :h go:

[count] go       Перейдите в {count} байт в буфере.

Например, 42go переходит к байту 42.

Чтобы перейти к шестнадцатеричному или восьмеричному адресу, вам нужно будет построить команду с :normal! go или эквивалентной функцией :goto и str2nr() или printf().

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

Ответ 2

Да, используя :help starting.txt, вы можете найти справку обо всех аргументах командной строки vim.

Используя вышеприведенную команду goto, предоставленную несколькими другими, вы должны будете предоставить vim команду из командной строки, чтобы перейти к смещению байта, например

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

Существует флаг времени компиляции, описанный в :help +byte_offset, который вы можете проверить для использования команды :ve. Моя версия Ubuntu скомпилирована по умолчанию.

Ответ 3

В то время как этот вопрос имеет свои собственные достоинства, могу ли я предположить, что вы делаете все это довольно круто, используя все hd, grep, Vim и оболочку?

Почему бы не использовать Vim и только Vim для всего процесса?

Ключ находится в :h 23.4, "Двоичные файлы": Vim может быть вашим шестнадцатеричным редактором.

После запуска Vim с вашим файлом vim -b myfile рабочий процесс будет выглядеть следующим образом:

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

Обязательно прочитайте :h hex-editing, для получения более подробной информации.