Vim 错误格式化多个条目

Vim errorformat multiple entries

我使用的 c++ 编译器(由 ant 启动)会产生不同格式的错误。例如:

[apply] /localdev/foo.cc:10:29: error: foo.h: No such file or directory

(我们称之为格式 A)

格式如下:

[apply] /localdev/foo.cc:307: error: expected ';' before 'std'

(我们称之为格式 B)
注意格式 A 有一个额外的列说明符。
我正在尝试创建一个 vim 将匹配两者的错误格式。
我有:

set errorformat=\ %#[apply]\ %f:%l:%c:\ error:\ %m
set errorformat+=\ %#[apply]\ %f:%l:\ error:\ %m

但我似乎无法 Vim 将格式 B 与之匹配。
我知道错误格式本身是正确的,因为如果我注释掉第一个错误格式设置,我可以匹配错误格式 B。如果我注释掉第二个错误格式设置,我可以匹配错误格式 A.
请注意,如果我反转错误格式设置,那么当 Vim 遇到错误格式 A 时,它会尝试打开一个名为“/localdev/foo.cc:10”的文件,当然找不到。 (看起来 vim 有一个贪婪的匹配算法,匹配文件的字符串在这种情况下也包括行号)。

匹配格式 A 和格式 B 的正确错误格式设置是什么?
我在互联网和 vim 文档中查看了制作 %c "optional" 的方法,但我没有找到秘密。
谢谢。

你可以这样做:

let &errorformat =
    \ '%\s%#[apply] %f:%l:%c: %trror: %m,' .
    \ '%\s%#[apply] %f:%l: %trror: %m'