我在VIM中编辑的文件中有此列:
16128 16132 16136 16140 # etc...
我想将其转换为此列:
0x3f00 0x3f04 0x3f08 0x3f0c # etc...
我怎样才能在VIM中做到这一点?
使用printf
(类似于C的sprintf
)\=
命令来处理替换:
:%s/\d\+/\=printf("0x%04x", submatch(0))
细节:
:%s/\d\+/
:匹配\d\+
任何行(:%
)上的一个或多个数字()并替换(s
).
\=
:对于每个匹配,替换为以下表达式的结果:
printf("0x%04x",
:使用格式生成一个字符串,该格式"0x%04x"
对应于文字0x
后跟四位(或更多)十六进制数字,用零填充.
submatch(0)
:完全匹配的结果(即数字).
有关更多信息,请参阅:
:help printf() :help submatch() :help sub-replace-special :help :s
另一种方式:
:rubydo $_ = '0x%x' % $_
要么:
:perldo $_ = sprintf '0x%x', $_
这样可以减少输入,并且如果你通过这样做,你可以避免一定程度的引用/ shell转义:!
.您需要将Perl/Ruby支持编译到您的Vim中.
另一种方式,将它传递给awk
awk '{printf "0x%x\n",$1}' file