如何在Vim错误文件中包含的所有行上执行相同的命令?

如何在Vim错误文件中包含的所有行上执行相同的命令?,vim,Vim,场景:我在我的源代码上运行了一个静态代码分析工具,在我的很多文件中发现了一个问题 问题是这份声明 *retval = -1; 需要由 if(retval != NULL) { *retval = -1; } 我已经设法把所有相关的地方都放在了一个循环中,并开始了循环 修正代码 这个工作流程可以,但我有400个地方可以触摸,所以有点无聊 我是否可以指示Vim(例如类似)更正错误文件中所有位置的语句 不,简单地打开所有文件,然后是不是一个选项,因为构造*retval=-1;发生多次,但只

场景:我在我的源代码上运行了一个静态代码分析工具,在我的很多文件中发现了一个问题

问题是这份声明

*retval = -1;
需要由

if(retval != NULL)
{
    *retval = -1;
}
我已经设法把所有相关的地方都放在了一个循环中,并开始了循环

修正代码 这个工作流程可以,但我有400个地方可以触摸,所以有点无聊

我是否可以指示Vim(例如类似)更正错误文件中所有位置的语句

不,简单地打开所有文件,然后是不是一个选项,因为构造*retval=-1;发生多次,但只需要在errorfile中包含的行上进行修复。

使用宏:

转到第一个错误 按qq在q寄存器中录制宏 修正这个错误 保存缓冲区 执行:cn以转到下一个错误 按q键完成录制宏 现在,你可以打字了100@q-这将执行步骤3-5 100次。但这不会是100次——在某个时候,它会到达错误列表的末尾并失败。到那时,所有错误将暂时修复…

使用宏:

转到第一个错误 按qq在q寄存器中录制宏 修正这个错误 保存缓冲区 执行:cn以转到下一个错误 按q键完成录制宏
现在,你可以打字了100@q-这将执行步骤3-5 100次。但这不会是100次——在某个时候,它会到达错误列表的末尾并失败。到那时,所有错误都将暂时修复…

您可以使用宏。只需键入qq,然后执行:cn并修复代码,保存,然后键入q1000@q.您可以使用宏。只需键入qq,然后执行:cn并修复代码,保存,然后键入q1000@q.

Doh!这么简单。太多了!啊!这么简单。太多了!这里的问题和答案非常相关:core Vim中甚至有for:cdo,所以如果你觉得特别慈善,你也可以在那里投赞成票。如果静态分析工具能够找到这些问题,你应该能够通过语义修补自动修复它。例如,coccinelle提供了两个修复空解引用的示例补丁:这里的问题和答案非常相关:core Vim中甚至有for:cdo,因此如果你觉得特别慈善,你可以在那里投赞成票,如果静态分析工具能够发现这些问题,那么您应该能够通过语义修补自动修复这些问题。例如,coccinelle有两个示例修补程序用于修复空解引用: