【发布时间】:2015-05-06 09:13:03
【问题描述】:
我正在使用 vim 处理如下文本
0x8000 INDEX1 ....
0x8080 INDEX2 ....
....
0x8800 INDEXn ....
我想使用正则表达式来获取每行的索引号。那是
0x8000 ~ 0
0x8080 ~ 1
....
0x8800 ~ n
数学计算应为 (hex - 0x8000) / 0x80。我正在尝试使用 vim 正则表达式替换来获得行中的结果
%s/^\(\x\+\)/\=printf("%d", submatch(1) - 0x8000)
这将产生
0 INDEX0
128 INDEX1
....
2048 INDEXn
我想要做的是进一步将其更改为
0 INDEX0
1 INDEX1
...
20 INDEXn
也就是说,我想将第一列进一步划分为 0x80。这是我遇到问题的时候。
原始参数是“submatch(1) - 0x8000”。我现在向它添加一个“/0x80”,形成
%s/^\(\x\+\)/\=printf("%d", (submatch(1) - 0x8000)\/0x80)
现在Vim报错
Invalid expression: printf("%d", (submatch(1) - 0x8000)\/0x80))
看起来 vim 在处理“/”时遇到了问题。我也尝试使用单个“/”(没有转义),但仍然失败。
谁能帮我解决这个问题?
【问题讨论】: