我在VIM中编辑的文件中有此列:
16128
16132
16136
16140
# etc...
Run Code Online (Sandbox Code Playgroud)
我想将其转换为此列:
0x3f00
0x3f04
0x3f08
0x3f0c
# etc...
Run Code Online (Sandbox Code Playgroud)
我怎样才能在VIM中做到这一点?
DrA*_*rAl 40
使用printf(类似于C的sprintf)\=命令来处理替换:
:%s/\d\+/\=printf("0x%04x", submatch(0))
Run Code Online (Sandbox Code Playgroud)
细节:
:%s/\d\+/:匹配\d\+任何行(:%)上的一个或多个数字()并替换(s).\= :对于每个匹配,替换为以下表达式的结果:printf("0x%04x",:使用格式生成一个字符串,该格式"0x%04x"对应于文字0x后跟四位(或更多)十六进制数字,用零填充.
submatch(0) :完全匹配的结果(即数字).有关更多信息,请参阅:
:help printf()
:help submatch()
:help sub-replace-special
:help :s
Run Code Online (Sandbox Code Playgroud)
另一种方式:
:rubydo $_ = '0x%x' % $_
Run Code Online (Sandbox Code Playgroud)
要么:
:perldo $_ = sprintf '0x%x', $_
Run Code Online (Sandbox Code Playgroud)
这样可以减少输入,并且如果你通过这样做,你可以避免一定程度的引用/ shell转义:!.您需要将Perl/Ruby支持编译到您的Vim中.
小智 5
选择 (VISUAL) 包含数字的行块,然后:
:!perl -ne 'printf "0x\%x\n", $_'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6813 次 |
| 最近记录: |