我正在尝试匹配C错误消息,如下所示:
gmake[1]: Entering directory `/project/swbuild45/ethanl/swfeature_int/pkt' ... sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c: In function 'bfd_delete_constituent_session': sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3654: error: 'bfd_ses' undeclared (first use in this function) sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3654: error: (Each undeclared identifier is reported only once sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3654: error: for each function it appears in.) sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3654: error: expected ';' before 'sion_cst' sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3663: error: 'dbl_dequ' undeclared (first use in this function) sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3663: error: expected ';' before 'eue' ... gmake[1]: Leaving directory `/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
你有更好的主意吗?
答案 0 :(得分:5)
当然,多行错误格式肯定是一种痛苦,所以你需要一种快速优化errorformat的方法。
将编译输出重定向到文件或vim缓冲区(如果需要,可以使用它)
$ make &> <your-error-file>
转到vim,打开quickfix窗口
:copen
开始你的精炼循环
:set errorformat=<whatever>
:caddf <your-error-file>
:cex []
:set errorformat=<whatever>
:caddf <your-error-file>
...
说明:
读取您的错误文件。您可以用
替换它:read <your-error-file>
:caddbuffer
轻松改变输入,检测不同的错误
如果结果不符合预期:
清理quickfix窗口
:cex []
该命令将空列表加载到quickfix窗口
对于你的问题
:set errorformat=%f:%l:\ %trror:\ %m,%Dgmake[%*\\d]:\ Entering\ directory\ `%f',%Xgmake[%*\\d]:\ Leaving\ directory\ `%f',%-G%.%#
应该足够了
答案 1 :(得分:-2)
打开quickfix窗口可能会有所帮助
:copen
然后,您可以直观地浏览错误列表并输入&lt; enter&gt;你有兴趣直接跳到有问题的那一行。
另见
:help quickfix