使用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 之间的所有匹配内容都将被用作错误的消息。
%+
有帮助吗?:help efm-ignore
- 1983