Comprobación de pelusa de Vim: solo muestra el mensaje si hay un error

4

Tengo esta línea en mi .vimrc, que significa "cuando guarde un archivo .rb, ejecútelo ruby -c" (la comprobación de errores del intérprete ruby).

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

Cuando guardo ese archivo, siempre veo la salida en la parte inferior de la pantalla, así que me acostumbro y empiezo a ignorarlo. Lo que quiero es ver solo la salida si hay errores.

Puedo ver que cuando hay errores, después de decir lo que son, en la parte inferior dice "shell devuelto 1".

¿Cómo puedo modificar esta línea para que solo muestre un mensaje si el shell devuelve 1? ¿Hay alguna manera de suprimir condicionalmente la salida de un comando de shell ejecutado en vim?

Nathan Long
fuente

Respuestas:

2

Definitivamente deberías mirar el plugin Syntastic . Comprueba automáticamente la sintaxis del archivo en el búfer actual al guardar, admite muchos tipos de archivos (ruby, python, php, etc.) y hace exactamente lo que necesita: muestra la salida solo en caso de errores.

galymzhan
fuente
Syntastic se ha convertido en una de mis herramientas más grandes para ahorrar tiempo desde que me lo dijiste. Solo quería señalar que, en general, la comprobación de errores se realiza llamando a un programa externo, que puede necesitar ser instalado. Puede averiguar lo que necesita mirando en el syntax_checkerarchivo. Por ejemplo, para la comprobación de Javascript necesita tener instalado JSLint ( jslutilidad de línea de comandos): superuser.com/questions/247012/…
Nathan Long
0

Cuando Vim ve el estado de salida del comando, el comando ya ha enviado su salida, si la hay, al terminal, por lo que no puede suprimir condicionalmente la salida del comando al probar el estado de salida.

La página del comando man ruby ​​(1) dice que -ccausa que ruby envíe el mensaje "Sintaxis OK" a la salida estándar si no hay errores. De las pruebas parece que los errores de sintaxis se informan al error estándar. Por lo tanto, podría suprimir el mensaje "Sintaxis correcta" al redirigir la salida estándar a / dev / null y suprimir el eco del comando mediante el uso de :silenteste modo.

autocmd BufWritePost *.rb silent! !ruby -c <afile> > /dev/null
garyjohn
fuente
Cuando hago esto, tampoco veo salida de error. ¿Vos si?
Nathan Long
Hago. Simplemente copié esa línea y la pegué en una sesión de vim y lo intenté nuevamente. Sin embargo, vim no parece esperar ningún resultado de un autocomando BufWritePost, por lo que el resultado parece estar escrito por ruby ​​directamente en / dev / tty en lugar de ser administrado por las rutinas de visualización de vim. La parte inferior de mi ventana de terminal contiene esto, "bar.rb" 1L, 10C writtenbar.rb:1: syntax errory la pantalla no está sincronizada con el cursor.
garyjohn