Ответ 1
Я думаю, что проблема заключается в формулировке правила %Z
. Сначала я придумал это:
:set errorformat=%E%n)\ %.%#,%Z%f:%l,%C%m,%-G%.%#
Это поймает первое имя файла и свяжет его с сообщением об ошибке.
По какой-то причине объединение последнего имени файла было намного сложнее. Я не смог сделать это с помощью efm
, но вместо этого взломал этот фильтр Python:
import sys
import re
errors = []
OTHER = 0
MESSAGE = 1
FILE_LINE = 2
next_is = OTHER
lines = sys.stdin.readlines()
for line in lines:
line = line.strip()
if (next_is == OTHER):
if (re.search("^[0-9]+\)", line)):
next_is = MESSAGE
elif (next_is == MESSAGE):
errors.append([line, ''])
next_is = FILE_LINE
elif (next_is == FILE_LINE):
if (re.search("^.+:[0-9]+", line)):
errors[-1][1] = line
elif (len(line) == 0 and len(errors[-1][1]) > 0):
next_is = OTHER
for error in errors:
print "{0}:{1}".format(error[1], error[0])
Это позволит зафиксировать все ошибки и вывести их в однострочном формате. Связанное имя файла и номер строки являются последними, упомянутыми для ошибки. Этот script clobbers все другие выходные данные, но это будет решена путем добавления, например, a print line
после line = line.strip()
.