Я понял, почему это не работает, как я надеялся. Вывод выводится на консоль, но когда vim
завершает работу, он удаляет все, что он выводит, поэтому он не виден. Это можно продемонстрировать с помощью этого:
autocmd VimLeave *.php :!echo Hello; sleep 5
Я могу видеть это в течение пяти секунд, затем он очищается и возвращает меня к приглашению. Я думал, что могу просто сделать что-то вроде этого:
autocmd VimLeave *.php :!php -l %; sleep 5
И это работает, но затем он создает пятисекундный сон каждый раз, когда я завершаю редактирование файла PHP. Я могу использовать Ctrl-C
, но это плохая привычка, и я добавляю еще один шаг в 95% случаев, когда я выхожу из файла и ошибок нет. Я думал о том, чтобы сменить sleep 5
на sleep 1
чтобы мне не пришлось так долго ждать в этих случаях, но потом у меня осталась всего одна секунда, чтобы просмотреть любые реальные ошибки, которые могут быть не очень хорошими.
Итак, я написал что-то более сложное:
autocmd VimLeave *.php :!php -l % &> /dev/null; if [ $? -ne 0 ]; then ERRORS=$(( php -l % ) 2>&1 ); clear; printf "\n************************************ ERRORS ************************************\n$ERRORS\n********************************************************************************\n"; sleep 10; fi;
Это делает следующее:
Если ошибок нет, он просто выходит как обычно и не отображает никаких специальных выходных данных. Если есть ошибка, это дает мне красиво отформатированное отображение ошибки как это:
************************************ ERRORS ************************************
PHP Parse error: syntax error, unexpected 'include' (T_INCLUDE) in file.php on line 4
Parse error: syntax error, unexpected 'include' (T_INCLUDE) in ami.php on line 4
Errors parsing file.php
********************************************************************************
Он очищает экран перед отображением этой ошибки и ждет в течение 10 секунд. Это дает мне более чем достаточно времени для просмотра и понимания ошибки. Я всегда могу выйти из режима Ctrl-C
, если я закончу до истечения 10 секунд. Если я Ctrl-C
или 10 секунд истекают, он возвращается к основной консоли, которую я видел перед открытием vim
, как я обычно видел при выходе из vim
без каких-либо этих изменений.
Это, вероятно, можно превратить в функцию autocmd, чтобы она была немного чище в моем файле .vimrc
, если бы я думал, что стоит потратить время на то, чтобы научиться это делать.