使用VIM搜索重写C宏代码&更换

时间:2013-09-17 16:51:23

标签: regex vim replace

我有一个使用过时宏来读取32位整数的文件,

READ32(dest, src)

我需要用

替换所有来电
dest = readUint32(&src);

我正在尝试编写一个SED风格的Vim搜索&替换命令,但没有运气。

我可以使用READ32([a-z]\+, cmd)搜索提示使用/匹配第一部分,但它似乎与:s语法不匹配。

3 个答案:

答案 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

的c ++样式变量

编辑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 ):

  • n
    转到下一场比赛

  • c w readUint32 Esc
    更改函数名称)<登记/>
  • w w dt,
    删除第一个参数
    <登记/>
  • “_ dw
    删除多余的,

  • b b P a = Esc
    = 之前插入附加readUint32的结果变量)

  • A ;
    ;追加到行尾

现在您可以重复宏(1000@q)。