5

我正在尝试让 makeprg 和 errorformat 与 VIM 和 jslint 一起使用,并且似乎无法在我的一生中获得正确的错误格式......我正在使用 jslint 的 nodejs 版本,它产生的结果如下:

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)

我基本上想匹配行号、列和错误,并使用当前文件作为文件名。有人知道怎么做吗?

需要明确的是,我正在寻找错误格式以使该命令正常工作。目前我的 .vimrc 文件有

augroup js
    set makeprg=jslint\ %
    set errorformat=%E%>%l,%c:%m,%Z
augroup END

这只是不工作(jslint工作正常,但错误格式是错误的)......

4

5 回答 5

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
于 2012-01-03T01:22:10.680 回答
6

一个非常古老的线程,但这是@dule 出色答案的后续。这实际上只是一个调整,但它可能对其他人也有用(我花了一些时间在 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 的方式进行操作,您会在快速修复窗口中获得以下输出:

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.
于 2012-04-15T15:18:28.880 回答
2

实际上,我今天早些时候只是将 JSLint 加入了我的应用程序makeprg中,当然我需要一些快速修复支持。

我创建了node-jslint的一个分支,它以类似 GCC 的格式输出 JSLint 的错误。是efm%f:%l:%c:%m。如果您可以使用 node.js,我建议您使用 node-jslint(尤其是如果您正在处理 node.js/CommonJS 项目)。

至于你原来的问题:我认为没有%>必要。如果删除它没有帮助,请尝试以下操作:

set efm=%l,%c: %m
于 2010-09-15T17:03:17.383 回答
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);

希望这可以帮助您接近使格式正常工作。

于 2010-09-14T22:33:17.073 回答
0

我以前从未使用过此选项,但帮助中的示例似乎表明%m您的模式末尾应该有一个额外的,或者您可能只需要转义逗号:

set errorformat=%E%>%l\\,%c:%m,%Z%m

更新:实际上您的错误字符串中似乎有两个数字,1后跟一个空格,然后是116. 也许这会起作用:

set errorformat=%E%>%n\\ %l\\,%c:%m,%Z%m
于 2010-09-14T22:59:43.937 回答