【问题标题】:How do I execute the same command on all lines contained in a error file of Vim?如何在 Vim 错误文件中包含的所有行上执行相同的命令?
【发布时间】:2013-10-06 11:50:09
【问题描述】:

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

问题在于声明

*retval = -1;

需要替换为

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

我已经设法在errorfile 中找到所有相关位置并开始循环

这个工作流程可以做到,但我有 400 个地方要触摸,所以有点无聊。

我可以指示 Vim(类似于 bufdo)更正错误文件中所有位置的语句吗?

不,简单地打开所有文件和bufdo then 不是一个选项,因为*retval = -1; 结构多次出现,但只需要修复错误文件中包含的行。

【问题讨论】:

  • 这里的问答非常相关:stackoverflow.com/q/5686206
  • 在核心 Vim 中甚至还有 a patch pending:cdo,所以如果你觉得特别慈善,你也可以在那里投票。
  • 如果静态分析工具能够发现这些问题,您应该能够通过语义补丁自动修复它。例如。 coccinelle 有几个示例补丁可以修复NULL 取消引用:link

标签: vim


【解决方案1】:

使用宏:

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

现在,您可以输入100@q - 这将执行步骤 3-5 100 次。但它不会是 100 次 - 在某些时候它会到达错误列表的末尾并失败。到那时,所有的错误都会被修复(暂时...)

【讨论】:

  • 噢!很简单。非常感谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 2017-04-04
    相关资源
    最近更新 更多