2015-08-20 2 views
0

Компилятор C++ Im, использующий (начинающийся ant), производит ошибки в разных форматах. Например:Vim errorformat несколько записей

[apply] /localdev/foo.cc:10:29: error: foo.h: No such file or directory

(позволяет вызов, что формат А)

и в форматах, таких как:

[apply] /localdev/foo.cc:307: error: expected ';' before 'std'

(назовем, что формат В)
Примечание Формат А имеет дополнительный столбец спецификатор.
Я пытаюсь создать код ошибки vim, который будет соответствовать обоим.
у меня есть:

set errorformat=\ %#[apply]\ %f:%l:%c:\ error:\ %m
set errorformat+=\ %#[apply]\ %f:%l:\ error:\ %m

Но я не могу получить Vim, чтобы соответствовать Format B с этим.
Я знаю, что сам метод errorformat прав, потому что, если я прокомментирую первый параметр errorformat, я могу сопоставить ошибку Format B., и если я прокомментирую второй параметр errorformat, я могу совместить ошибку. Формат A.
Обратите внимание, что если я отменил настройки errorformat, а затем, когда Vim встречает ошибку Format A, он пытается открыть файл под названием «/localdev/foo.cc:10», который, конечно, не найден. (похоже, что vim имеет жадный алгоритм соответствия, а строка, соответствующая файлу, также включает номер строки в этом случае).

Какова правильная настройка формата errorformat, которая будет соответствовать как формату A, так и формату B?
Я просмотрел интернет и документацию vim о том, как сделать% c «необязательным», но я не нашел этого секрета.
спасибо.

+0

не будет добавить ответ, потому что я не понимаю, почему это работает, но если вы замените первоначальный белый узор пространство с '% * \\ s' те сообщения об ошибках. [ссылка] (http://vim.1045645.n5.nabble.com/Need-help-about-CompilerSet-errorformat-td5720668.html) – Vitor

ответ

1

Вы можете сделать это следующим образом:

let &errorformat = 
    \ '%\s%#[apply] %f:%l:%c: %trror: %m,' . 
    \ '%\s%#[apply] %f:%l: %trror: %m' 
+0

Мне нравится использовать 'let' для таких случаев, так что вам не нужно иметь дело со всеми обратными косыми чертами (хотя я поставил точку сразу после ведущей обратной косой черты ). –

+0

@ dash-tom-bang Сработает ли лучше после обратной косой черты? –

+0

работал отлично. Спасибо, Сато Кацура. – spetros