El silencio debe ir antes !./make.sh, no antes au. Poner silentantes ausolo significa que registrará el autocomando en silencio. Debería verse así en su lugar:
au BufWritePost * silent! !./make.sh
Un problema al ejecutar un comando externo como este con el :silentcomando es que la pantalla no se vuelve a dibujar, dejándolo con una pantalla en blanco. Sin embargo, vim tiene un comando que vuelve a dibujar la pantalla, que puede usarse así:
au BufWritePost * silent! execute "!./make.sh >/dev/null 2>&1" | redraw!
La razón por la que necesito usar el comando de ejecución es porque el :!comando usa cualquier carácter que se encuentre después de él, lo que significa que no podría hacerlo silent! !./make.sh | redraw!porque bash intentaría interpretar todos los caracteres después !.
Notas
Tenga en cuenta que :silent!ignora los mensajes de error, mientras :silentque no. Además, la >/dev/null 2>&1parte redirige toda la salida de !./make.sha /dev/null. Puede leer más sobre la redirección de E / S en bash aquí .
El segundo comando funcionó, aunque todavía imprime la salida en la pantalla. Además, no necesito presionar Enter cuando el script termina más, lo cual es bueno. Pero me pregunto si hay alguna forma de suprimir totalmente la salida.
Andre Herman Bezerra
1
¿Reemplazar execute "!./make.sh"con execute "!./make.sh >/dev/null 2>&1"ayuda? Esto redirige toda la salida del comando a /dev/null. Lea tldp.org/LDP/abs/html/io-redirection.html para obtener más información sobre la redirección en bash.
EvergreenTree
¡Debería haber pensado en eso! Funciona. ¡Gracias!
Andre Herman Bezerra
7
La respuesta a su pregunta directa es tal como lo publicó @EvergreenTree. Sin embargo, siento que te falta alguna herramienta incorporada de Vim para construir / compilar / linting proyectos. Lo más notable :makey la lista de soluciones rápidas.
¿Qué nos hace usar el uso :make?
El uso le :makepermite recopilar sus errores en una lista conocida como la lista de soluciones rápidas. Usando la solución rápida, puede navegar entre los errores en sus archivos, por lo que salta directamente a donde el compilador dice que el error es (¿útil, verdad?).
:hacer
Correr :makeejecutará el programa make, 'makeprg'. Luego analice la salida con 'errorformat'y ponga cada entrada en la lista de soluciones rápidas.
Por lo general, 'makeprg'el makecomando predeterminado que ejecuta a Makefile. Sin embargo, puede cambiar su a 'makeprg'través del :compilercomando o configurarlo directamente.
También puede pasar argumentos adicionales a :make. p.ej:make clean
Nota: la ejecución :makea menudo mostrará el resultado del comando en la parte inferior de la pantalla con un mensaje que le pide que presione enter. Simplemente presione Intro ya que toda la salida estará disponible en la lista de soluciones rápidas. Puede suprimir esto mediante :silent, por ejemplo :silent make.
Un comando personalizado común para una marca silenciosa es:
command -nargs=* -bar Smake silent make <args> <bar> cwindow
lista de soluciones rápidas
Después de ejecutar :makesu lista de soluciones rápidas, se guardará la salida del compilador.
Use el siguiente comando para navegar por la lista de soluciones rápidas.
:copen para abrir la ventana de revisión rápida
:cclose para cerrar la ventana de revisión rápida
:cnext/ :cprevpara pasar al elemento siguiente / anterior
:ccimprimir en la parte inferior el error actual o :cc 3mostrar un error específico en este ejemplo 3
Personalmente, uso el complemento intacto de Tim Pope para navegar por la lista de soluciones rápidas.
¿Qué pasa con la ejecución :makeautomática y silenciosa?
Puedes hacer esto con un lugar :autocmdcomo tú.
augroup auto_make
autocmd!
autocmd BufWritePost * silent make
autocmd QuickFixCmdPost *make* cwindow
augroup END
Como beneficio adicional, agregué al abrir la ventana de revisión rápida a través de :cwindowsi hay algún error presente.
Nota: Debe ser más específico con ese patrón de archivo en el BufWritePostautocmd para que no se generen archivos no relacionados.
¿Hay aún más?
Esto está usando solo algunos de los comandos incorporados de Vim más algunos autocmd para convencer. Por supuesto, hay complementos y herramientas que pueden ayudarte
Dispatch.vim se puede usar para ejecutar :maketrabajos de forma asincrónica.
Ale.vim (Asynchronous Lint Engine) es un complemento para proporcionar linting en NeoVim y Vim 8 mientras edita sus archivos de texto.
Unimpaired.vim facilita la administración de la lista de soluciones rápidas.
Llanos viejos Makefiles. A menos que ./script.shsea muy complicado, es posible que desee considerar el uso de make. Puede escalar para hacer más tareas más tarde y es una herramienta de construcción común.
Puede usar Vim Awesome para buscar más complementos que puedan ayudar.
Conclusión
Personalmente, integro :makey la solución rápida en mi propio flujo de trabajo. Creo que capturar el resultado de su proceso de compilación y capturar los errores para que valga la pena la inversión. Como una ventaja adicional, posiblemente te sientas más cómodo con la lista de soluciones rápidas y puedas usar la lista para otras aplicaciones como :grep.
execute "!./make.sh"
conexecute "!./make.sh >/dev/null 2>&1"
ayuda? Esto redirige toda la salida del comando a/dev/null
. Lea tldp.org/LDP/abs/html/io-redirection.html para obtener más información sobre la redirección en bash.La respuesta a su pregunta directa es tal como lo publicó @EvergreenTree. Sin embargo, siento que te falta alguna herramienta incorporada de Vim para construir / compilar / linting proyectos. Lo más notable
:make
y la lista de soluciones rápidas.¿Qué nos hace usar el uso
:make
?El uso le
:make
permite recopilar sus errores en una lista conocida como la lista de soluciones rápidas. Usando la solución rápida, puede navegar entre los errores en sus archivos, por lo que salta directamente a donde el compilador dice que el error es (¿útil, verdad?).:hacer
Correr
:make
ejecutará el programa make,'makeprg'
. Luego analice la salida con'errorformat'
y ponga cada entrada en la lista de soluciones rápidas.Por lo general,
'makeprg'
elmake
comando predeterminado que ejecuta aMakefile
. Sin embargo, puede cambiar su a'makeprg'
través del:compiler
comando o configurarlo directamente.También puede pasar argumentos adicionales a
:make
. p.ej:make clean
Nota: la ejecución
:make
a menudo mostrará el resultado del comando en la parte inferior de la pantalla con un mensaje que le pide que presione enter. Simplemente presione Intro ya que toda la salida estará disponible en la lista de soluciones rápidas. Puede suprimir esto mediante:silent
, por ejemplo:silent make
.Un comando personalizado común para una marca silenciosa es:
lista de soluciones rápidas
Después de ejecutar
:make
su lista de soluciones rápidas, se guardará la salida del compilador.Use el siguiente comando para navegar por la lista de soluciones rápidas.
:copen
para abrir la ventana de revisión rápida:cclose
para cerrar la ventana de revisión rápida:cnext
/:cprev
para pasar al elemento siguiente / anterior:cc
imprimir en la parte inferior el error actual o:cc 3
mostrar un error específico en este ejemplo 3Personalmente, uso el complemento intacto de Tim Pope para navegar por la lista de soluciones rápidas.
¿Qué pasa con la ejecución
:make
automática y silenciosa?Puedes hacer esto con un lugar
:autocmd
como tú.Como beneficio adicional, agregué al abrir la ventana de revisión rápida a través de
:cwindow
si hay algún error presente.Nota: Debe ser más específico con ese patrón de archivo en el
BufWritePost
autocmd para que no se generen archivos no relacionados.¿Hay aún más?
Esto está usando solo algunos de los comandos incorporados de Vim más algunos autocmd para convencer. Por supuesto, hay complementos y herramientas que pueden ayudarte
:make
trabajos de forma asincrónica.:write
../script.sh
sea muy complicado, es posible que desee considerar el uso de make. Puede escalar para hacer más tareas más tarde y es una herramienta de construcción común.Conclusión
Personalmente, integro
:make
y la solución rápida en mi propio flujo de trabajo. Creo que capturar el resultado de su proceso de compilación y capturar los errores para que valga la pena la inversión. Como una ventaja adicional, posiblemente te sientas más cómodo con la lista de soluciones rápidas y puedas usar la lista para otras aplicaciones como:grep
.Para más ayuda ver:
fuente
:make
mientras respondía esto, pero no lo incluí. Es una mejor idea usar make para compilar cosas.