vim中的多行错误格式

时间:2013-05-23 15:49:32

标签: vim multiline errorformat

我正在尝试匹配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

你有更好的主意吗?

2 个答案:

答案 0 :(得分:5)

当然,多行错误格式肯定是一种痛苦,所以你需要一种快速优化errorformat的方法。

  1. 将编译输出重定向到文件或vim缓冲区(如果需要,可以使用它)

    $ make &> <your-error-file>
    
  2. 转到vim,打开quickfix窗口

    :copen
    
  3. 开始你的精炼循环

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

    1. 设置错误格式
    2. 读取您的错误文件。您可以用

      替换它
      :read <your-error-file>
      :caddbuffer
      
    3.   

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

      如果结果不符合预期:

      1. 清理quickfix窗口

        :cex []
        
      2.   

        该命令将空列表加载到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