Verificação de cotação do Vim - mostra apenas a mensagem se houver um erro

4

Eu tenho essa linha no meu .vimrc, o que significa "quando eu salvar um arquivo .rb, execute-o ruby -c" (verificação de erro do interpretador de ruby).

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

Quando salvo esse arquivo, sempre vejo a saída na parte inferior da tela, então me acostumo e começo a ignorá-lo. O que eu quero é ver apenas a saída se houver erros.

Percebo que, quando há erros, depois de dizer o que são, na parte inferior, diz "shell retornou 1."

Como posso modificar essa linha para mostrar apenas uma mensagem se o shell retornar 1? Existe uma maneira de suprimir condicionalmente a saída de um comando shell executado no vim?

Nathan Long
fonte

Respostas:

2

Você definitivamente deveria olhar para o plugin Syntastic . Ele verifica automaticamente a sintaxe do arquivo no buffer atual ao salvar, suporta muitos tipos de arquivos (ruby, python, php, etc, prontos para uso) e faz exatamente o que você precisa - mostra a saída apenas em caso de erros.

galymzhan
fonte
O Syntastic se tornou uma das minhas maiores ferramentas de economia de tempo desde que você me contou. Só queria observar que geralmente a verificação de erros é feita chamando um programa externo, que pode precisar ser instalado. Você pode descobrir o que ele precisa consultando o syntax_checkerarquivo. Por exemplo, para verificação do Javascript, você precisa ter o JSLint ( jslutilitário de linha de comando) instalado: superuser.com/questions/247012/…
Nathan Long
0

Quando o Vim vê o status de saída do comando, o comando já enviou sua saída, se houver, para o terminal, para que você não possa suprimir condicionalmente a saída do comando testando o status de saída.

A página do manual ruby ​​(1) diz que -cfaz com que o ruby envie a mensagem "Sintaxe OK" para a saída padrão se não houver erros. Parece que, ao testar, os erros de sintaxe são relatados como erro padrão. Portanto, você pode suprimir a mensagem "Syntax OK" redirecionando a saída padrão para / dev / null e suprimir o eco do comando usando :silent, desta forma.

autocmd BufWritePost *.rb silent! !ruby -c <afile> > /dev/null
garyjohn
fonte
Quando faço isso, também não vejo saída de erro. Você?
Nathan Long
Eu faço. Eu apenas copiei essa linha e colei em uma sessão do vim e tentei novamente. No entanto, o vim não parece esperar nenhuma saída de um comando automático do BufWritePost, portanto a saída parece ser gravada por ruby ​​diretamente no / dev / tty, em vez de ser gerenciada pelas rotinas de exibição do vim. A parte inferior da janela do meu terminal contém isso "bar.rb" 1L, 10C writtenbar.rb:1: syntax error, e a tela está fora de sincronia com o cursor.
9111 garyjohn