4

У меня есть эта строка в моем .vimrc , что означает «когда я сохраняю файл .rb, запускаю его через ruby -c » (проверка ошибок интерпретатора ruby).

autocmd BufWritePost *.rb !ruby -c <afile>

Когда я сохраняю этот файл, я всегда вижу вывод в нижней части экрана, поэтому я привыкаю к нему и начинаю его игнорировать. Я хочу видеть вывод только при наличии ошибок.

Я вижу, что когда есть ошибки, после того, как они говорят, что они есть, внизу, это говорит: «оболочка вернула 1».

Как я могу изменить эту строку, чтобы она отображала сообщение, только если оболочка возвращает 1? Есть ли способ условно прекратить вывод команды shell, запущенной в vim?

2 ответа2

2

Вы должны обязательно взглянуть на плагин Syntastic. Он автоматически проверяет синтаксис файла в текущем буфере при сохранении, поддерживает множество типов файлов (ruby, python, php и т.д. Из коробки) и делает именно то, что вам нужно - он показывает вывод только в случае ошибок.

0

К тому времени, когда Vim видит состояние завершения команды, команда уже отправила свой вывод, если он есть, на терминал, поэтому вы не можете условно подавить вывод команды, протестировав состояние выхода.

Страница man ruby(1) сообщает, что -c заставляет ruby отправлять сообщение "Синтаксис OK" на стандартный вывод, если ошибок нет. Из тестирования следует, что синтаксические ошибки сообщаются к стандартной ошибке. Поэтому вы можете подавить сообщение "Синтаксис ОК", перенаправив стандартный вывод в /dev /null, и подавить отображение команды, используя :silent , как это.

autocmd BufWritePost *.rb silent! !ruby -c <afile> > /dev/null

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .