给定这样的 C# 编译器消息,当打开警告作为错误时:
File.cs(3,1415): error CS1572: Warning as Error: XML comment on 'FooLibrary.Foo.Foo()' has a param tag for 'foo', but there is no parameter by that name
我希望将其errorformat
标记为 type warning而不是 type error。
我已经有这样的价值观errorformat
:
%f(%l\\,%c):\ %trror\ %m^M
%f(%l\\,%c):\ %trror\ %m
(当你看到^M
时,知道它是我文件中的实际控制代码,但它不能很好地传输到网络。这足以表明 C# 编译器输出\r\n
而不仅仅是\n
,这是一个轻微的麻烦。)
这是我第一次尝试的:
%f(%l\\,%c):\ error\ %m: %tarning\ as\ Error:\ %m^M
%f(%l\\,%c):\ error\ %m: %tarning\ as\ Error:\ %m
Vim 哀叹它无法处理%m
一个字符串中多次出现的 。
因此,我开始对不寻常的包含断言的正则表达式产生兴趣。这是我尝试过的:
%f(%l\\,%c):\ error\ %\\(%[A-Z0-9]%#:\ %tarning\ as\ Error:\ %[%^^M]%#%\\)%\\@=%m^M
%f(%l\\,%c):\ error\ %\\(%[A-Z0-9]%#:\ %tarning\ as\ Error:\ %[%^^M]%#%\\)%\\@=%m
这没有用;它得到类型“C”(可能来自“CS1572”)和消息“W”(%t
应该消耗的值)。(在其他一些实验中,省略了%t
,证明有必要消耗断言中的其余字符串,否则它会%m
在那时停止匹配。非常奇怪。)
意识到它并没有将它们视为正则表达式组,而是以一种特殊的线性方式,然后我尝试反转断言并得出以下结论:
%f(%l\\,%c):\ error\ %\\(%m^M%\\)%\\@=%[A-Z0-9]%#:\ %tarning\ as\ Error:\ %.%#^M
%f(%l\\,%c):\ error\ %\\(%m^M%\\)%\\@=%[A-Z0-9]%#:\ %tarning\ as\ Error:\ %.%#
不幸的是,这些也失败了,得到类型“C”而不是“警告”,并且(尽管最终得到完整的消息)^M
在字符串的末尾留下了。
errorformat
我已经用尽了我在命令中能想到的可能性;还有什么其他方法可以解决这个问题,还是我需要求助于运行另一个脚本来包装它,这会将格式变成 Vim 可以处理的格式?
(所有这些都是为了在快速修复列表中获得“警告”而不是“错误”这个词。可悲,不是吗?)