Vim errorformat和jslint

时间:2010-09-14 21:21:56

标签: vim errorformat

我试图让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工作正常,但错误格式错误)...

5 个答案:

答案 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