2013-09-30 22 views
1

场景:我在我的源代码上运行了一个静态代码分析工具,这些工具在我的很多文件上发现了问题。如何在Vim的错误文件中包含的所有行上执行相同的命令?

的问题是,该声明

*retval = -1; 

需要由

if(retval != NULL) 
{ 
    *retval = -1; 
} 

我已经成功地在一个errorfile所有相关的地方进行更换,并开始与循环

这个工作流程做,但我有400米的地方接触,所以这是一个有点无聊。

我可以指示Vim(类似于例如bufdo)更正错误文件中存在的所有地方的语句吗?

不,只是打开所有的文件和bufdo然后不是一个选项,因为构造*retval = -1;发生多次,但只需要固定在错误文件中包含的行。

+1

这里的问题和答案是非常相关的:http://stackoverflow.com/q/5686206 – glts

+0

甚至有[补丁正在等待](https://groups.google.com/d/msg/vim_dev/dfyt- G6SMec/_6h8pDUpeZMJ)作为核心Vim中的':cdo',所以如果你觉得特别慈善,你可以在那里添加一个投票。 – glts

+0

如果静态分析工具能够找到这些问题,您应该能够通过语义修补来自动修复它。例如。 coccinelle有几个修补'NULL'解除引用的示例补丁:[link](http://coccinelle.lip6.fr/rules/#null) – jtaylor

回答

4

使用宏:

  1. 转到第一个错误
  2. qq录制宏的q寄存器
  3. 的修正了错误
  4. 保存缓冲
  5. 执行:cn到转到下一个错误
  6. q完成录制宏

现在,您可以键入[email protected] - 这将执行步骤3-5 100次。但它不会达到100次 - 在某些时候它会到达错误列表的末尾并失败。届时,所有错误将被修复(现在...)

+0

Doh!很简单。多谢! – eckes

相关问题