我试图让makeprg和errorformat使用VIM和jslint,并且似乎无法在我的生活中获得正确的错误格式...我正在使用jslint的nodejs版本,它产生的结果如下: / p>
1 116,9: The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.
for (var k in o)
我基本上想要匹配行号,列和错误,并使用当前文件作为文件名。有谁知道怎么做?
要清楚,我正在寻找errorformat以使此命令正常工作。目前我的.vimrc文件有
augroup js
set makeprg=jslint\ %
set errorformat=%E%>%l,%c:%m,%Z
augroup END
哪个不行(jslint工作正常,但错误格式错误)...
答案 0 :(得分:8)
一个旧帖子,但对于遇到它的人,就像我一样:
对于通过npm(v0.1.2)安装的当前版本的node-jslint,错误输出如下所示:
filename.js
#1 Missing 'use strict' statement.
y = x // Line 2, Pos 3
#2 Expected 'y' at column 5, not column 3.
y = x // Line 2, Pos 3
我正在使用以下efm来解析错误:
autocmd FileType javascript set efm=%-P%f,
\%E%>\ #%n\ %m,%Z%.%#Line\ %l\\,\ Pos\ %c,
\%-G%f\ is\ OK.,%-Q
答案 1 :(得分:6)
一个非常古老的主题,但这是@dule's excellent answer的后续行动。这真的只是一个调整,但它也可能对其他人有用(花了我一些时间与TFM一起解决,所以为什么不分享?):
setlocal makeprg=jslint\ %
setlocal errorformat=%-P%f,
\%A%>%\\s%\\?#%*\\d\ %m,%Z%.%#Line\ %l\\,\ Pos\ %c,
\%-G%f\ is\ OK.,%-Q
第三行有两个不同之处。首先,我将单个空间的初始硬编码匹配替换为匹配零个或一个空格的模式(即,使空间可选)。我必须这样做,因为来自jslint
的以下输出:
... First 8 errors trimmed
#9 Expected '$' at column 9, not column 7.
$('img#placeholder').attr('src', pic); // Line 15, Pos 7
#10 Expected '$' at column 9, not column 7.
$('img#placeholder').attr('alt', desc) // Line 16, Pos 7
仔细观察,你会看到它。对于错误1-9,在行的开头有一个空格。对于10 ... n,没有空间。一个小小的东西,但这意味着quickfix窗口无法正常处理错误10及以上。啊。 (顺便说一句,我确实考虑过这样的答案:“在任何给定的JS文件中不要超过9个错误,但这似乎有点”尾巴摇尾巴“。而且,现在我知道的比我几个小时前做的更多scanf
。)
第二个区别是,我将%E
替换为%A
,将匹配器%n
替换为忽略该数字的模式。这主要是出于审美原因。按照dule的方式进行操作,您可以在quickfix窗口中获得此输出:
showPic.js|5 col 7 error 1| Expected 'event' at column 9, not column 7.
showPic.js|9 col 7 error 2| Expected 'var' at column 9, not column 7.
我不想在那里计算错误,我不需要提醒他们都是错误 - 我知道。因此,使用%A
,您可以获得更简单的输出:
showPic.js|5 col 7| Expected 'event' at column 9, not column 7.
showPic.js|9 col 7| Expected 'var' at column 9, not column 7.
答案 2 :(得分:2)
我实际上今天刚刚将JSLint卡入我的makeprg
,自然我需要一些quickfix支持。
我创建了一个node-jslint的分支,它以类似GCC的格式输出JSLint的错误。 efm
是:%f:%l:%c:%m
。如果你可以使用node.js,我建议使用node-jslint(特别是如果你正在使用node.js / CommonJS项目)。
至于你原来的问题:我认为%>
是不必要的。如果删除无效,请尝试以下操作:
set efm=%l,%c: %m
答案 3 :(得分:1)
我对这个版本不是100%肯定。我使用了我下载的一个,我刚刚更改了jslint.js源代码以便为我输出。我的行看起来像。
var i=0;i<JSLINT.errors.length;i+=1){var e=JSLINT.errors[i];if(e){print(a[0]+':'+e.line+':'+e.reason);
希望这可以帮助您接近使格式正常工作。
答案 4 :(得分:0)
我以前从未使用过这个选项,但是帮助中的示例似乎表明模式末尾应该有一个额外的%m
,或者你只需要转义逗号:
set errorformat=%E%>%l\\,%c:%m,%Z%m
更新:实际上,您的错误字符串中似乎有两个数字,1
后跟一个空格,然后是116
。也许这会奏效:
set errorformat=%E%>%n\\ %l\\,%c:%m,%Z%m