У меня есть этот столбец в файле, который я редактирую в VIM:
16128
16132
16136
16140
# etc...
И я хочу преобразовать его в этот столбец:
0x3f00
0x3f04
0x3f08
0x3f0c
# etc...
Как я могу сделать это в VIM?
Ответ 1
Используйте printf (аналогично C sprintf) с помощью команды \= для обработки замены:
:%s/\d\+/\=printf("0x%04x", submatch(0))
Подробнее
:%s/\d\+/: сопоставить одну или несколько цифр (\d\+) на любой строке (:%) и подставить (s).
\=: для каждого соответствия замените результат следующего выражения:
printf("0x%04x",: создайте строку, используя формат "0x%04x", который соответствует буквалу 0x, за которым следует четырехзначный (или более) шестнадцатеричный номер, дополненный нулями.
submatch(0): результат полного совпадения (т.е. числа).
Это немного меньше типизации, и вы избегаете уровня кавычек/оболочки, которые вы получите, если вы сделали это через :!. Вам нужна поддержка Perl/Ruby, собранная в ваш Vim.
Ответ 3
другой способ, передать его awk
awk '{printf "0x%x\n",$1}' file
Ответ 4
Выберите (VISUAL) блок строк, содержащий числа, а затем:
:!perl -ne 'printf "0x\%x\n", $_'
Ответ 5
Чтобы преобразовать десятичный знак в шестнадцатеричный, используйте команду
:echo printf("%x", decimal)
Это приводит к отображению шестнадцатеричного эквивалента десятичного числа.