我有一个使用过时宏来读取32位整数的文件,
READ32(dest, src)
我需要用
替换所有来电dest = readUint32(&src);
我正在尝试编写一个SED风格的Vim搜索&替换命令,但没有运气。
我可以使用READ32([a-z]\+, cmd)
搜索提示使用/
匹配第一部分,但它似乎与:s
语法不匹配。
答案 0 :(得分:1)
这是我最终想到的工作:
:%s/READ32(\(\a\+\),\(\a\+\)/\1 = readUint32(\&\2);
诀窍是将您要存储的值包装在\1
& \2
和\(
中的\)
另一个诀窍就是你必须逃离&
运算符&在vim替换是“整场比赛”。
编辑:随着我的改进,进一步改进:
:%s/READ32(\(\w\+\),\s*\(\w\+\)/\1 = readUint32(\&\2);
将\a
更改为\w
,因为我在其中包含_的变量
添加了\ s *来处理第二个变量之间的空白问题
现在只是尝试处理样式class.variable.subvariable
编辑2:
将\w
替换为[a-zA-Z0-9_.]
以捕获我的变量命名的所有方式。
答案 1 :(得分:0)
这应该做你想要的或至少让你开始:
%s-READ32(\s*\(\i\+\)\s*,\s*\(\i\+\)\s*)-\1 = readUint32(\&\2);-g
答案 2 :(得分:0)
我再次执行宏格式:点击 * 以“突出显示”搜索READ32
。
现在,我们将录制一个宏( q .. q q ):
readUint32
Esc ,
)=
Esc =
之前插入附加readUint32
的结果变量);
追加到行尾)现在您可以重复宏(1000@q
)。