10

我阅读了文档,但更加困惑。
我有编译器生成的以下错误:

          rot;
          ^
"cpp\c1.cpp", line 13: error(114): identifier
          "rot" is undefined


1 error detected in the compilation of "c1.cpp".

我知道如何检测给出错误行的行,但是我在错误列表中获得了大量额外的无用信息,并且错误消息被分成两行,我更愿意合并。

我的起始错误格式是:

:set efm=\"%f\"\\,\ line\ %l:\ error(%n):\ %m

既然我们这样做了,有没有一种快速的方法来测试 efm 而无需一直运行 make?

4

1 回答 1

28

首先,我谈谈调试。不幸的是,没有特别简单的方法可以做到这一点,但一种有用的可能性是运行 make 并将输出吐到一个文件中,然后:

:let &makeprg="cat ~/outputfile.log"
:make

关于制作错误格式,这确实需要一些试验和错误。您可以将 %A、%C 和 %Z 用于多行消息,并且可以使用 %-G 忽略内容。顺序非常重要,请注意有时 %C 甚至 %Z 会出现在 %A! 之前!在您的情况下,您可以使用下面的 efm 到达某个地方。我倾向于使用let &efm =andlet &efm .=而不是设置,因为您不必逃避每个空格或引号,您可以逐渐建立它。它也更具可读性。

" Start of the multi-line error message (%A),
" %p^ means a string of spaces and then a ^ to
" get the column number
let &efm  = '%A%p^' . ','
" Next is the main bit: continuation of the error line (%C)
" followed by the filename in quotes, a comma (\,)
" then the rest of the details
let &efm .= '%C"%f"\, line %l: error(%n): %m' . ','
" Next is the last line of the error message, any number
" of spaces (' %#': equivalent to ' *') followed by a bit
" more error message
let &efm .= '%Z %#%m' . ','
" This just ignores any other lines (must be last!)
let &efm .= '%-G%.%#'
于 2009-10-06T18:07:51.503 回答