Eu descobri porque isso não funciona como eu esperava. A saída é ecoada para o console, mas quando vim
termina de sair, ele remove tudo o que foi exibido, por isso não é visível. Isso pode ser demonstrado com isto:
autocmd VimLeave *.php :!echo Hello; sleep 5
Eu posso ver por cinco segundos, então ele limpa e me leva de volta ao prompt. Eu pensei que poderia fazer algo assim:
autocmd VimLeave *.php :!php -l %; sleep 5
E isso funciona, mas cria um sono de cinco segundos toda vez que eu saio da edição de um arquivo PHP. Eu posso Ctrl-C
fora dele, mas isso é um mau hábito para entrar, e adiciona outro passo para o 95% dos casos em que eu sair de um arquivo e não há erros. Pensei em alterar sleep 5
para sleep 1
, para que eu não precisasse esperar tanto nesses casos, mas só me resta um segundo para ver os erros reais, o que pode não ser bom.
Então escrevi algo um pouco mais complexo:
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;
Isso faz o seguinte:
Se não houver erros, ele sairá normalmente e não exibirá nenhuma saída especial. Se houver um erro, ele me fornecerá uma exibição de erro bem formatada como esta:
************************************ 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
********************************************************************************
Ele limpa a tela antes de exibir esse erro e aguarda 10 segundos. Isso me dá tempo mais que suficiente para ver e compreender o erro. Eu posso sempre Ctrl-C
fora da exibição se eu terminar antes dos 10 segundos. Se eu Ctrl-C
out ou os 10 segundos estiverem ativos, ele volta para o console principal que vi antes de abrir vim
, como normalmente veria ao sair de vim
sem nenhuma dessas modificações.
Isso provavelmente pode ser feito em uma função autocmd para que fique um pouco mais limpa dentro do meu arquivo .vimrc
, se eu achar que valeu a pena aprender como fazer isso.