如何在替换语句中将十六进制转换为十进制?

ste*_*eig 7 vim

我有这样一条线:

pad(2)= 0x0041

我想将十六进制更改为十进制,预期结果是

pad(2)= 65

我刚试过:%s/\(.*\) = \(.*\)/\1 = \=printf("%d", submatch(2)),但失败了.

你能帮忙解决这个问题吗?

sth*_*sth 10

Vim具有str2nr()将不同数字表示转换为其十进制值的功能.要转换十六进制值,您可以像这样使用它:

s/0x[0-9a-fA-F]\+/\=str2nr(submatch(0), 16)
Run Code Online (Sandbox Code Playgroud)