Vim: формат ошибки соответствует всему - PullRequest
6 голосов
/ 15 сентября 2010

Я пытаюсь сопоставить следующую ошибку с efm:

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

Сообщение об ошибке может быть любым (то есть оно не всегда соответствует AssertionError: .* или.*Error: .* форматов).Общий формат:

errormessage
    at filename:line:column

Моя проблема в том, что сообщение об ошибке соответствует любой строке;Мне нужно ограничить сообщение об ошибке только одной строкой, и совпадать только в том случае, если за ним следует совпадающая строка "at".

Я пробовал следующее efm:

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

Это почти работает, но оно соответствует строкам состояния (например, не ошибки до и после ошибки) в дополнение к ошибкам.Как заставить %E%m ... %Z быть всего двумя строками (одна для сообщения об ошибке и одна для строки at)?У меня есть доступ к стандартным инструментам UNIX для makeprg, если это необходимо.

Ответы [ 4 ]

1 голос
/ 18 сентября 2010

Вы действительно хотите тратить свое время на изучение непонятного языка шаблонов, который больше нигде не применяется? Если бы кто-то не платил вам за написание плагинов компилятора 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;
}
1 голос
/ 26 января 2011

Это работает?

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

% -G%.% # Говорит vim игнорировать целые строки, которые не соответствуют другим шаблонам.

0 голосов
/ 02 ноября 2018

Может

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

Проверьте это

:help efm%>
0 голосов
/ 16 сентября 2010

А как же ...

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