在vim里转换HEX数据的显示

在做嵌入式设备开发和调试工作中,可能常常遇到以下场景,需要把:

0000:60 00 00 00 00 00 00 00  00 00 00 42 00 00 18 00  `....... ...B....:0015
0016:01 80 80 00 03 14 20 24  20 11 08 17 08 12 34 56  ...... $  .....4V:0031
0032:78 08 87 65 43 21 36 35  30 34 31 37 31 38 00 59  x..eC!65 041718.Y:0047
0048:30 30 30 30 30 30 30 30  30 30 30 31 30 30 30 30  00000000 00010000:0063
0064:30 30 30 30 49 43 41 52  44 30 30 30 30 30 30 30  0000ICAR D0000000:0079
0080:34 30 30 30 30 30 30 31  32 31 36 30 30 30 30 30  40000001 21600000:0095
0096:30 34 30 30 30 30 32 30  34 30 35 31 31 31 31 31  04000020 40511111:0111
0112:31 31 31                                          111              :0127

这样的文本,转换为单行,头尾部分不要,中间重复的空格也不要。如下:

60 00 00 00 00 00 00 00 00 00 00 42 00 00 18 00 01 80 80 00 03 14 20 24 20 11 08 17 08 12 34 56 78 08 87 65 43 21 36 35 30 34 31 37 31 38 00 59 30 30 30 30 30 30 30 30 30 30 30 31 30 30 30 30 30 30 30 30 49 43 41 52 44 30 30 30 30 30 30 30 34 30 30 30 30 30 30 31 32 31 36 30 30 30 30 30 30 34 30 30 30 30 32 30 34 30 35 31 31 31 31 31 31 31 31

这个可以用vim的替换来实现,命令是:
:%s/\d*:\(\(\x\|\s\)\{24}\) \(\(\x\|\s\)\{24}\).*\n/\1\3/g

我们还可以为它在.vimrc中定义一个快捷键映射:
map <C-H> :%s/\d*:\(\(\x\\|\s\)\{24}\) \(\(\x\\|\s\)\{24}\).*\n/\1\3/g<CR>
这样以后按一下CTRL+H键就搞定了。