Vim错误格式和JSLint

5

我正在尝试在VIM中使用makeprg和errorformat与jslint配合使用,但似乎无论如何都无法正确设置错误格式... 我正在使用nodejs版本的jslint,其产生的结果类似于:

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个回答

8

尽管这是一篇旧的帖子,但对于像我这样遇到它的人:

对于通过npm安装的node-jslint的当前版本(v0.1.2),错误输出如下:

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

谢谢。我已经为此苦苦挣扎了几天! - Telemachus
非常好!你是怎么想出来的?我也支持Telemachus! - bluekeys
2
请查看我的回答以获取此问题的调整。再次感谢您完成了99%的困难工作。/cc @dsjbirch - Telemachus

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没有空格。这是一个微小的问题,但它意味着快速修复窗口不能正确处理10及以上的错误。噫。(顺便说一句,我考虑了答案“不要在任何给定的JS文件中制造超过9个错误,但那似乎有点本末倒置。此外,现在我对scanf有了更多的了解。)
第二个区别是我用A替换了E,用一个模式来忽略匹配器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.

我之前遇到了同样的问题(错误在第9行上,格式不正确),这个答案解决了它!应该接受这个答案。 - rowanu

2
我今天早些时候将JSLint插入到我的makeprg中,我需要一些快速修复支持。
我创建了一个分支node-jslint,它以类似GCC的格式输出JSLint的错误。 efm是:%f:%l:%c:%m。如果您可以使用node.js,我建议使用node-jslint(特别是如果您正在开发node.js / CommonJS项目)。
至于您最初的问题:我认为%>不是必要的。如果删除这个没有帮助,请尝试简单地使用以下内容:
set efm=%l,%c: %m

我无法让错误格式正常工作,但我切换到了你的jslint分支(而不是reid的),现在它完美地工作了...谢谢。 - Kris Erickson

1

我不确定那个版本是否完全正确。我使用了一个下载的版本,然后只是更改了 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);

希望这能帮助你接近让格式正常工作的目标。

0

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

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接