6

次のエラーを と一致させようとしていますefm:

AssertionError: 1 == 2
    at /home/strager/projects/blah/blah.js:13:37

エラー メッセージは何でもかまいません (つまり、AssertionError: .*またはの.*Error: .*形式に常に一致するとは限りません)。一般的な形式は次のとおりです。

errormessage
    at filename:line:column

私の問題は、エラーメッセージがどの行にも一致することです。エラー メッセージを 1 行だけに制限し、一致する "at" 行が後に続く場合にのみ一致させる必要があります。

私は次のことを試しましたefm

set efm=%Z\ \ \ \ at\ %f:%l:%c,%E%m
" %Z    at %f:%l:%c,%E%m

これはほとんど機能しますが、エラーに加えてステータス行 (たとえば、エラーの前後の非エラー) に一致します。%E%m ... %Z合計 2 行 (エラー メッセージ用に 1 行、行用に 1行) になるように強制するにはどうすればよいatですか? 必要に応じて、標準の UNIX ツールにアクセスできmakeprgます。

4

4 に答える 4

1

他のどこにも適用されていないあいまいなパターン言語の学習に本当に時間を費やしたいですか? 誰かが vim コンパイラ プラグインを作成するためにあなたにお金を払っていない限り、私はそうしません (そして私は vim が大好きです!)。ツールボックスを開いても構わないと思っているので、チェッカーの周りにラッパーを書き、解析しやすい形式で吐き出すだけです。例えば:

#!/usr/bin/perl
use warnings;
use strict;

open my $fh, '-|', 'compiler', @_ or die $!;

my $last_line = <$fh> // exit;
while (defined(my $line = <$fh>)) {
    my($file, $l, $c) = $line =~ /^    at (.+?):(\d+):(\d+)$/;
    print "$file:$l:$c: $last_line" if defined($file);
    $last_line = $line;
}
于 2010-09-17T21:19:58.493 に答える
1

これは機能しますか?

set efm=%Z\ \ \ \ at\ %f:%l:%c,%E%m,%-G%.%#

%-G%.%# は、他のパターンと一致しない行全体を無視するよう vim に指示します。

于 2011-01-26T18:05:54.653 に答える
0

どうですか...

set efm=%E%m,%Z\ \ \ \ at\ %f:%l:%c
于 2010-09-15T22:58:25.573 に答える