使用 vim 的 errorformat 语法,有没有办法在过滤结果中使用部分消息?
例如,除了错误本身之外,一些链接器错误没有任何明确的内容可以将它们区分为在线错误:
/path/to/foo.cpp:42: undefined reference to 'UnimplementedFunction'
或者
/path/to/foo.cpp:43: multiple definition of 'MultiplyDefinedFunction'
使用错误格式:
set efm=%f:%l:\ %m
会正确捕获并显示这两种情况,但会错误地匹配许多其他情况(任何以“[string]:[number]:”开头的行)。
或者,明确指定它们:
set efm=
set efm+=%f:%l:\ undefined\ reference\ to\ %m
set efm+=%f:%l:\ multiple\ definition\ of\ %m
消除了误报,但“消息”变得不那么有用了——不再包括实际错误(只是它之后的任何内容)。
我缺少处理这种情况的语法中的任何内容吗?
理想情况下,我希望能够说出以下内容:
set efm+=%f:%l:\ %{StartMessage}undefined\ reference\ to\ %*\\S%{EndMessage}
set efm+=%f:%l:\ %{StartMessage}multiple\ definition\ of\ %*\\S%{EndMessage}
... StartMessage 和 EndMessage 之间匹配的所有内容都用作错误消息。