質問
私はVIMとJSLINTで動作するMAKEPRGとErrorFormatを取得しようとしていますが、私の寿命に合わせてエラー形式を正しく取得できないようです...私は次のような結果を生成する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は正常に動作しますが、エラーフォーマットは間違っています)...
解決
私は実際にjslintを私に刺しました makeprg
今日、そして当然、QuickFixのサポートが必要でした。
のブランチを作成しました node-jslint GCCのような形式でJSLINTのエラーを出力します。 efm
は: %f:%l:%c:%m
. 。 node.jsを使用できる場合は、node-jslintを使用することをお勧めします(特にnode.js/commonjsプロジェクトで作業している場合)。
あなたの元の問題については、私は考えていません %>
必要です。それを削除しない場合は、単に次のことを試してください。
set efm=%l,%c: %m
他のヒント
古いスレッドですが、私のようにそれに出くわす人のために:
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
非常に古いスレッドですが、これはフォローアップです @デュールの優れた答え. 。それは本当に微調整ですが、他の人にとっても役立つかもしれません(TFMと一緒に解決するのに時間がかかったので、共有してみませんか?)
setlocal makeprg=jslint\ %
setlocal errorformat=%-P%f,
\%A%>%\\s%\\?#%*\\d\ %m,%Z%.%#Line\ %l\\,\ Pos\ %c,
\%-G%f\ is\ OK.,%-Q
両方とも3行目に2つの違いがあります。まず、単一のスペースの最初のハードコーディングされた一致を、ゼロまたは1つのスペースに一致するパターンに置き換えます(つまり、スペースをオプションにします)。次の出力のために、私はこれをしなければなりませんでした 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
.)
2番目の違いは、私が交換したことです %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.
私はそのバージョンについて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);
それがあなたがフォーマットの動作を取得することに近づくのに役立つことを願っています。
私はこれまでこのオプションを使用したことがありませんが、ヘルプの例は余分なものがあるべきだと示すように思われます %m
あなたのパターンの終わりに、あるいは多分あなたはただコンマから逃れる必要があるかもしれません:
set errorformat=%E%>%l\\,%c:%m,%Z%m
アップデート: 実際、エラー文字列に2つの数字があるようです。 1
その後、スペースが続きます 116
. 。おそらくこれはうまくいくでしょう:
set errorformat=%E%>%n\\ %l\\,%c:%m,%Z%m