我使用 make 来编译,有时使用 gcc 或 clang。 我有一个函数可以根据编译器更改错误格式。 但我仍然收到与
make
相关的警告,我想忽略它们,或者至少将它们降级为非警告:
make[2]: *** [/buildpath/build.make:519: /path/test.cxx.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:36062: /path] Error 2
make: *** [Makefile:163: all] Error 2
我的 gcc 错误格式:
\ '%-G%f:%s:,' .
\ '%-G%f:%l: %#error: %#(Each undeclared identifier is reported only%.%#,' .
\ '%-G%f:%l: %#error: %#for each function it appears%.%#,' .
\ '%-GIn file included%.%#,' .
\ '%-G %#from %f:%l\,,' .
\ '%f:%l:%c: %trror: %m,' .
\ '%f:%l:%c: %tarning: %m,' .
\ '%I%f:%l:%c: note: %m,' .
\ '%f:%l:%c: %m,' .
\ '%f:%l: %trror: %m,' .
\ '%f:%l: %tarning: %m,'.
\ '%I%f:%l: note: %m,'.
\ '%f:%l: %m'
从
vim
运行它时,我正确地得到与gcc
相关的错误,但仍然有这些make
警告:
make[2]: *** [/buildpath/build.make:519:/build.make|519 warning| /path/test.cxx.o] Error 1
make[1]: *** [CMakeFiles/Makefile2|36062 warning| /path] Error 2
make: *** [Makefile|163 warning| all] Error 2
我尝试过
-G %#%#%#
来匹配三个星号(%#
是来自 :help errorformat
的星号)。但我收到一条错误消息:
Neomake error in: function <SNR>166_nvim_exit_handler[6]..<SNR>166_exit_handler[27]..<SNR>166_RegisterJobOutput[16]..<SNR>166_ProcessJobOutput, line 55
Neomake: [2.2:2] Error during output processing for build: Vim(caddexpr):E871: (NFA regexp) Can't have a multi follow a multi !.
从 Vim 9.0 patch 1613 开始,类 Unix 操作系统上
errorformat
的默认值已更新为忽略来自 Make 的这些消息。
这些是添加的条目(请注意,您需要转义这些模式中的某些字符才能在
:set
命令或您的 vimrc
中使用它们):
%-Gg%\?make[%*\d]: *** [%f:%l:%m
%-Gg%\?make: *** [%f:%l:%m
您的尝试(例如
%-G%#%#%#
)不起作用的原因是因为%#
用于插入正则表达式星号标记,而不是星号文字,并且因为这些错误格式模式必须匹配整行,而不仅仅是一个子串。
如果有人使用 Windows,您需要自己将模式添加到
errorformat
,如果有人使用 mingw32-make
而不是 make
,您将必须稍微修改模式。我通过将以下行添加到我的 vimrc
: 来做到这一点
set errorformat^=%-Gmingw32-make:\ ***\ [%f:%l:%r