2010-09-14 37 views
5

我想要makeprg和errorformat與VIM和jslint一起工作,並且似乎無法獲得錯誤格式正確的我的生活...我使用jslint的nodejs版本,它生成結果是:Vim errorformat和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的工作正常,但錯誤格式運用於是錯誤的)...

回答

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 
+0

我不能讓錯誤格式的工作,但我切換到您的JSLint的叉子(而比雷德的),這完美的作品...謝謝 – 2010-09-15 22:08:54

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); 

希望可以幫助您接近獲取格式工作。

0

我以前從未使用過該選項,但在幫助的例子似乎表明應該有你的格局結束的額外%m,也許你只需要逃避逗號:

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

更新:實際上,您的錯誤字符串中似乎有兩個數字,1後跟一個空格,然後是116。也許這會工作:

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

不,沒有工作...... – 2010-09-14 23:02:58

+0

仍然沒有運氣... – 2010-09-15 07:08:39

8

一個古老的線程,但對任何人通過它來了,像我這樣的:

對於通過NPM安裝節點的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 
+0

謝謝。我一直在努力掙扎着這幾天! – Telemachus 2012-01-14 12:32:41

+0

這個efm也適用於v0.1.4 – 2012-02-24 01:55:02

+0

很棒!你是怎麼想出來的?我是第二個Telemachus! – bluekeys 2012-03-20 18:21:18

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用一個模式來忽略該號碼。這主要是爲了美觀的原因,否則它@獨樂的方式,你在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,喲。 u得到這個簡單的輸出:

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. 
+0

我看到同樣的問題(錯誤>第9行沒有正確格式化),並且這個答案解決了它!它應該是被接受的答案。 – rowanu 2013-08-12 18:21:17