Получение кода ошибки linux из make в Vim - PullRequest
1 голос
/ 20 июня 2010

Я пытаюсь получить код возврата "0 of success, отличное от нуля, если ошибка" из make в Vim.В частности, я на Ubuntu и использование v:shell_error не работает.

После того, как покопаться и посмотреть на этот вопрос, кажется, что это из-за моей настройки скорлупы, которая

shellpipe=2>&1| tee

1011 * передает вывод make в vim.Оболочка, по-видимому, возвращает код ошибки из tee в vim, а не из make.Как получить вместо этого код ошибки make?

Ответы [ 2 ]

3 голосов
/ 20 июня 2010

Вы можете попробовать сделать для этого пользовательскую функцию.Например, используя :call system("make > make.out"), запустите make, перенаправив вывод в файл.После этого загрузите файл ошибок, используя :cf make.out.Хотя сам никогда этого не пробовал.

В конце концов, результаты make также могут быть просто проверены путем проверки наличия результата в файловой системе:

:make | if !filereadable("whatever-make-was-supposed-to-create") | throw "Make failed!!!" | endif

(Здесь символ '|' является разделителем команд vim.) Присвоение этого сочетанию клавиш избавило бы от необходимости печатать.

PS Обычно я стараюсь, чтобы мои программы не выдавали предупреждений, поэтому я никогда не сталкивалсяпроблема.Что, кстати, приводит к другому возможному решению: просто удалите предупреждения (или просто нежелательные выходные строки), используя, например, grep -v tabooword, из вывода make, переопределив 'makeprg'.Что на самом деле описано в справке: :h 'makeprg'.

PPS Я начал работать с VIM ... При условии, что вы также используете bash в качестве оболочки.Вы пытались добавить к выходу $ {PIPESTATUS [0]} в трубу?Например:

:set shellpipe=2>&1\ \|\ tee\ %s;exit\ \${PIPESTATUS[0]}

Только что проверил это на Debian, и это сработало для меня.:h 'shellpipe' для более.

1 голос
/ 20 июня 2010

Единственное, о чем я сейчас могу думать, - это создание двух скриптов-обёрток для make и tee. Я уверен, что есть более простой способ, но сейчас вы можете попробовать это:

Создайте скрипт make-оболочки:

#!/bin/bash

make $@
echo $? > ~/exit_code_cache

Создание сценария оболочки:

#!/bin/bash

tee $@
return `cat ~/exit_code_cache` # (or do something else with the exit code)

Используйте новый make :set makeprg=mymake и настройте свой собственный shellpipe, который использует вашу оболочку (shellpipe=2>&1 | mytee).

Это не проверено, но идея должна быть ясной. Надеюсь, это поможет.

...