У меня есть строка как это:
клавиатура (2) = 0x0041
Я хочу изменить шестнадцатеричное число в десятичное число, и ожидаемый результат
клавиатура (2) = 65
Я просто попробовал :%s/\(.*\) = \(.*\)/\1 = \=printf("%d", submatch(2))
, но это перестало работать.
Вы помогли бы решить это?
В Vim есть функция str2nr()
для преобразования различных представлений чисел в их десятичные значения. Для преобразования шестнадцатеричных значений вы можете использовать ее следующим образом:
s/0x[0-9a-fA-F]\+/\=str2nr(submatch(0), 16)
Ваш код почти исправен , но, согласно документации:
Когда строка замены начинается с "\ =", остаток интерпретируется как выражение. Это не работает рекурсивно: функция substitute () внутри выражение не может использовать "\ =" для замены строки.
Итак, вы можете изменить свой код на
%s/\(.*\) = \(.*\)/\=submatch(1)." = ".printf("%d", submatch(2))