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 の間で一致したすべてがエラーのメッセージとして使用されます。