Le silence devrait aller avant !./make.sh, pas avant au. Mettre silentavant ausignifie simplement qu'il enregistrera la commande automatique en silence. Cela devrait plutôt ressembler à ceci:
au BufWritePost * silent! !./make.sh
Un problème avec l'exécution d'une commande externe comme celle-ci avec la :silentcommande est que l'écran ne se redessine pas, vous laissant un écran vide. Cependant, vim a une commande qui redessine l'écran, qui peut être utilisée comme ceci:
au BufWritePost * silent! execute "!./make.sh >/dev/null 2>&1" | redraw!
La raison pour laquelle j'ai besoin d'utiliser la commande d'exécution est parce que la :!commande utilise tous les caractères trouvés après elle, ce qui signifie que je ne pouvais pas le faire silent! !./make.sh | redraw!car bash essaierait d'interpréter tous les caractères après !.
Remarques
Notez que :silent!ignore les messages d'erreur, alors :silentque non. De plus, la >/dev/null 2>&1partie redirige toutes les sorties de !./make.shvers /dev/null. Vous pouvez en savoir plus sur la redirection d'E / S dans bash ici .
La deuxième commande a fonctionné, bien qu'elle imprime toujours la sortie à l'écran. De plus, je n'ai plus besoin d'appuyer sur Entrée lorsque le script se termine, ce qui est bien. Mais je me demande s'il existe un moyen de supprimer totalement la sortie.
Andre Herman Bezerra
1
Est-ce que le remplacement execute "!./make.sh"par de l' execute "!./make.sh >/dev/null 2>&1"aide? Cela redirige toutes les sorties de la commande vers /dev/null. Lisez tldp.org/LDP/abs/html/io-redirection.html pour plus d'informations sur la redirection dans bash.
EvergreenTree
J'aurais dû penser à cela! Ça marche. Merci!
Andre Herman Bezerra
7
La réponse à votre question directe est exactement comme @EvergreenTree a posté. Cependant, j'ai l'impression que vous manquez un outil intégré de Vim pour la construction / compilation / linting de projets. Plus particulièrement :makeet la liste des correctifs.
Qu'est-ce que l'utilisation :makenous apporte?
L'utilisation vous :makepermet de rassembler vos erreurs dans une liste connue sous le nom de liste de correctifs. En utilisant le quickfix, vous pouvez naviguer entre les erreurs dans vos fichiers, donc vous sautez directement à l'endroit où le compilateur dit que l'erreur est (pratique, non?).
:faire
L' exécution :makeexécutera le programme make, 'makeprg'. Ensuite, analysez la sortie avec 'errorformat'et mettez chaque entrée dans la liste des correctifs.
Par 'makeprg'défaut, la makecommande qui exécute a Makefile. Cependant, vous pouvez modifier votre 'makeprg'via la :compilercommande ou le définir directement.
Vous pouvez également transmettre des arguments supplémentaires à :make. par exemple:make clean
Remarque: l'exécution :makeaffichera souvent la sortie de la commande en bas de l'écran avec une invite demandant d'appuyer sur entrée. Appuyez simplement sur Entrée car toutes les sorties seront disponibles dans la liste des correctifs. Vous pouvez supprimer cela via :silent, par exemple :silent make.
Une commande personnalisée courante pour une marque silencieuse est:
command -nargs=* -bar Smake silent make <args> <bar> cwindow
liste quickfix
Après avoir exécuté :makevotre liste de correctifs, la sortie du compilateur sera conservée.
Utilisez la commande suivante pour parcourir la liste des correctifs.
:copen ouvrir la fenêtre quickfix
:cclose fermer la fenêtre quickfix
:cnext/ :cprevpour passer à l'élément suivant / précédent
:ccpour imprimer en bas l'erreur actuelle ou :cc 3pour afficher une erreur spécifique dans cet exemple 3
Personnellement , je l' utilise de Tim Pope intact plug - in pour naviguer dans la liste des quickfix.
Qu'en est-il de l'exécution :makeautomatique et silencieuse?
Vous pouvez le faire avec un :autocmdcomme vous où.
augroup auto_make
autocmd!
autocmd BufWritePost * silent make
autocmd QuickFixCmdPost *make* cwindow
augroup END
En bonus, j'ai ajouté en ouvrant la fenêtre de correction rapide via :cwindows'il y a des erreurs.
Remarque: devrait être plus spécifique avec ce modèle de fichier sur l' BufWritePostautocmd afin que les fichiers non liés ne soient pas créés.
Il y en a encore plus?!
Cela utilise seulement quelques commandes intégrées de Vim plus quelques autocmd pour convaincre. Il existe bien sûr des plugins et des outils qui pourraient vous aider
Dispatch.vim peut être utilisé pour exécuter des :maketâches de manière asynchrone.
Ale.vim (Asynchronous Lint Engine) est un plugin pour fournir des peluches dans NeoVim et Vim 8 pendant que vous éditez vos fichiers texte.
Unimpaired.vim facilite la gestion de la liste des correctifs rapides.
Vieux Makefiles simples. À moins que ce ne ./script.shsoit très compliqué, vous pouvez envisager d'utiliser make. Il peut évoluer pour effectuer plus de tâches plus tard et est un outil de construction courant.
Vous pouvez utiliser Vim Awesome pour rechercher d'autres plugins qui pourraient vous aider.
Conclusion
Personnellement, :makej'intègre et le quickfix dans mon propre workflow. Je crois que la capture de la sortie de votre processus de construction et la capture des erreurs valent bien l'investissement. En prime, vous deviendrez peut-être plus à l'aise avec la liste des correctifs et pourrez utiliser la liste pour d'autres applications comme :grep.
execute "!./make.sh"
par de l'execute "!./make.sh >/dev/null 2>&1"
aide? Cela redirige toutes les sorties de la commande vers/dev/null
. Lisez tldp.org/LDP/abs/html/io-redirection.html pour plus d'informations sur la redirection dans bash.La réponse à votre question directe est exactement comme @EvergreenTree a posté. Cependant, j'ai l'impression que vous manquez un outil intégré de Vim pour la construction / compilation / linting de projets. Plus particulièrement
:make
et la liste des correctifs.Qu'est-ce que l'utilisation
:make
nous apporte?L'utilisation vous
:make
permet de rassembler vos erreurs dans une liste connue sous le nom de liste de correctifs. En utilisant le quickfix, vous pouvez naviguer entre les erreurs dans vos fichiers, donc vous sautez directement à l'endroit où le compilateur dit que l'erreur est (pratique, non?).:faire
L' exécution
:make
exécutera le programme make,'makeprg'
. Ensuite, analysez la sortie avec'errorformat'
et mettez chaque entrée dans la liste des correctifs.Par
'makeprg'
défaut, lamake
commande qui exécute aMakefile
. Cependant, vous pouvez modifier votre'makeprg'
via la:compiler
commande ou le définir directement.Vous pouvez également transmettre des arguments supplémentaires à
:make
. par exemple:make clean
Remarque: l'exécution
:make
affichera souvent la sortie de la commande en bas de l'écran avec une invite demandant d'appuyer sur entrée. Appuyez simplement sur Entrée car toutes les sorties seront disponibles dans la liste des correctifs. Vous pouvez supprimer cela via:silent
, par exemple:silent make
.Une commande personnalisée courante pour une marque silencieuse est:
liste quickfix
Après avoir exécuté
:make
votre liste de correctifs, la sortie du compilateur sera conservée.Utilisez la commande suivante pour parcourir la liste des correctifs.
:copen
ouvrir la fenêtre quickfix:cclose
fermer la fenêtre quickfix:cnext
/:cprev
pour passer à l'élément suivant / précédent:cc
pour imprimer en bas l'erreur actuelle ou:cc 3
pour afficher une erreur spécifique dans cet exemple 3Personnellement , je l' utilise de Tim Pope intact plug - in pour naviguer dans la liste des quickfix.
Qu'en est-il de l'exécution
:make
automatique et silencieuse?Vous pouvez le faire avec un
:autocmd
comme vous où.En bonus, j'ai ajouté en ouvrant la fenêtre de correction rapide via
:cwindow
s'il y a des erreurs.Remarque: devrait être plus spécifique avec ce modèle de fichier sur l'
BufWritePost
autocmd afin que les fichiers non liés ne soient pas créés.Il y en a encore plus?!
Cela utilise seulement quelques commandes intégrées de Vim plus quelques autocmd pour convaincre. Il existe bien sûr des plugins et des outils qui pourraient vous aider
:make
tâches de manière asynchrone.:write
../script.sh
soit très compliqué, vous pouvez envisager d'utiliser make. Il peut évoluer pour effectuer plus de tâches plus tard et est un outil de construction courant.Conclusion
Personnellement,
:make
j'intègre et le quickfix dans mon propre workflow. Je crois que la capture de la sortie de votre processus de construction et la capture des erreurs valent bien l'investissement. En prime, vous deviendrez peut-être plus à l'aise avec la liste des correctifs et pourrez utiliser la liste pour d'autres applications comme:grep
.Pour plus d'aide, voir:
la source
:make
pendant que je répondais à cela, mais je ne l'ai pas inclus. C'est une meilleure idée d'utiliser make avant de compiler les choses.