3

我正在尝试匹配这样的 C 错误消息:

gmake[1]:进入目录`/project/swbuild45/ethanl/swfeature_int/pkt'
...
sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:在函数'bfd_delete_constituent_session'中:
sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3654: 错误: 'bfd_ses' undeclared (第一次在这个函数中使用)
sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3654:错误:(每个未声明的标识符只报告一次
sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3654:错误:对于它出现的每个函数。)
sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3654:错误:预期';' 在“sion_cst”之前
sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3663: error: 'dbl_dequ' undeclared (第一次在这个函数中使用)
sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3663:错误:预期';' 在“eue”之前
...
gmake[1]: 离开目录`/project/swbuild45/ethanl/swfeature_int/pkt'

到目前为止,我想出了这个:

errorformat=%f:%l:\ %m,%Dgmake[%\\d%\\*]:\ Entering\ directory\ `%f',%Xgmake[%\\d%\\*]:\ Leaving\ directory%s

它打开文件并将我置于第一个错误,但我必须键入:cn四次才能得到第二个错误。我试图设置多行错误,但到目前为止我的错误字符串不起作用:

errorformat=%-Z%f:\ %s,%C%f:%l:\ %m,%A%f:\ %m,%Dgmake[%\\d%\\*]:\ Entering\ directory\ `%f',%Xgmake[%\\d%\\*]:\ Leaving\ directory%s

你有更好的主意吗?

4

2 回答 2

5

好吧,当然多行错误格式很麻烦,因此您需要一种方法来快速改进您的错误格式

  1. 将您的编译输出重定向到文件或 vim 缓冲区(因此您可以在必要时使用它)

    $ make &> <your-error-file>
    
  2. 转到 vim,打开快速修复窗口

    :copen
    
  3. 开始你的优化循环

    :set errorformat=<whatever>
    :caddf <your-error-file>
    :cex []
    :set errorformat=<whatever>
    :caddf <your-error-file>
    ...
    

解释:

  1. 设置错误格式
  2. 阅读您的错误文件。您可以将其替换为

    :read <your-error-file>
    :caddbuffer
    

轻松更改您的输入,检测不同的错误

如果结果不是预期的:

  1. 清洁快速修复窗口

    :cex []
    

该命令将一个空列表加载到快速修复窗口

对于你的问题

:set errorformat=%f:%l:\ %trror:\ %m,%Dgmake[%*\\d]:\ Entering\ directory\ `%f',%Xgmake[%*\\d]:\ Leaving\ directory\ `%f',%-G%.%#

应该够了

于 2015-06-05T00:41:09.633 回答
-3

打开快速修复窗口可能会有所帮助

:copen

然后,您可以直观地浏览您的错误列表并在您感兴趣的错误上键入 <enter> 以直接跳转到有问题的行。

另见

:help quickfix
于 2013-06-21T04:46:25.510 回答