Schweigen sollte vorher gehen !./make.sh, nicht vorher au. Das Setzen silentvor aubedeutet nur, dass der automatische Befehl unbemerkt registriert wird. Es sollte stattdessen so aussehen:
au BufWritePost * silent! !./make.sh
Ein Problem beim Ausführen eines solchen externen Befehls mit dem :silentBefehl ist, dass der Bildschirm nicht neu gezeichnet wird und Sie einen leeren Bildschirm haben. Vim hat jedoch einen Befehl, der den Bildschirm neu zeichnet. Dieser kann folgendermaßen verwendet werden:
au BufWritePost * silent! execute "!./make.sh >/dev/null 2>&1" | redraw!
Der Grund, warum ich den :!Befehl execute verwenden muss, liegt darin, dass der Befehl alle danach gefundenen Zeichen verwendet. Dies bedeutet, dass ich dies nicht einfach tun konnte, silent! !./make.sh | redraw!weil bash versucht hätte, alle Zeichen danach zu interpretieren !.
Anmerkungen
Beachten Sie, dass :silent!Fehlermeldungen ignoriert werden, während :silentdies nicht der Fall ist. Außerdem >/dev/null 2>&1leitet der Teil alle Ausgaben von !./make.shan um /dev/null. Weitere Informationen zur E / A-Umleitung finden Sie in Bash hier .
Der zweite Befehl hat funktioniert, druckt jedoch immer noch die Ausgabe auf dem Bildschirm. Außerdem muss ich die Eingabetaste nicht mehr drücken, wenn das Skript beendet ist, was gut ist. Aber ich frage mich, ob es eine Möglichkeit gibt, die Ausgabe vollständig zu unterdrücken.
Andre Herman Bezerra
1
Ersetzt execute "!./make.sh"mit execute "!./make.sh >/dev/null 2>&1"Hilfe? Hiermit werden alle Ausgaben des Befehls an umgeleitet /dev/null. Weitere Informationen zur Weiterleitung in bash finden Sie unter tldp.org/LDP/abs/html/io-redirection.html .
EvergreenTree
Daran hätte ich denken sollen! Es klappt. Vielen Dank!
Andre Herman Bezerra
7
Die Antwort auf Ihre direkte Frage lautet genauso wie bei @EvergreenTree. Ich habe jedoch das Gefühl, dass Ihnen einige der in Vim integrierten Tools zum Erstellen / Kompilieren / Flusen von Projekten fehlen. Vor allem :makeund die Quickfix-Liste.
Was bringt :makeuns die Nutzung ?
Mithilfe von :makekönnen Sie Ihre Fehler in einer Liste sammeln, die als Quickfix-Liste bezeichnet wird. Mit dem Quickfix können Sie zwischen den Fehlern in Ihren Dateien navigieren, sodass Sie direkt zu der Stelle springen, an der der Compiler den Fehler meldet (praktisch, oder?).
:machen
Läuft, :makewird das make-Programm ausgeführt 'makeprg'. 'errorformat'Analysieren Sie dann die Ausgabe mit und fügen Sie jeden Eintrag in die Quickfix-Liste ein.
Der Standardwert ist 'makeprg'normalerweise der makeBefehl, der a ausführt Makefile. Sie können dies jedoch 'makeprg'über den :compilerBefehl ändern oder direkt einstellen.
Sie können auch zusätzliche Argumente an übergeben :make. z.B:make clean
Hinweis: Beim Ausführen :makewird häufig die Ausgabe des Befehls am unteren Bildschirmrand mit der Aufforderung angezeigt, die Eingabetaste zu drücken. Drücken Sie einfach die Eingabetaste, da alle Ausgaben in der Quickfix-Liste verfügbar sind. Sie können dies unterdrücken, indem Sie :silentz :silent make.
Ein gebräuchlicher benutzerdefinierter Befehl für ein stilles Make lautet:
command -nargs=* -bar Smake silent make <args> <bar> cwindow
Quickfix-Liste
Nachdem Sie ausgeführt haben, enthält :makeIhre Quickfix-Liste die Ausgabe des Compilers.
Verwenden Sie den folgenden Befehl, um in der Quickfix-Liste zu navigieren.
:copen um das Quickfix-Fenster zu öffnen
:cclose um das Quickfix-Fenster zu schließen
:cnext/ :cprev, um zum nächsten / vorherigen Element zu wechseln
:ccum den aktuellen Fehler unten auszudrucken oder :cc 3einen bestimmten Fehler in diesem Beispiel anzuzeigen 3
Persönlich benutze ich Tim Popes unbeeinträchtigtes Plugin, um in der Quickfix-Liste zu navigieren.
Was ist mit :makeautomatischem und leisem Laufen ?
Sie können dies mit einem :autocmdwie Sie tun , wo.
augroup auto_make
autocmd!
autocmd BufWritePost * silent make
autocmd QuickFixCmdPost *make* cwindow
augroup END
Als Bonus habe ich beim Öffnen des Quickfix-Fensters hinzugefügt, :cwindowob Fehler vorliegen.
Hinweis: Sollte mit diesem BufWritePostDateimuster auf der AutocMD genauer sein, damit nicht verwandte Dateien nicht erstellt werden.
Gibt es noch mehr ?!
Hierfür werden nur einige der in Vim integrierten Befehle sowie einige automatische Befehle zum Überzeugen verwendet. Es gibt natürlich Plugins und Tools, die Ihnen helfen könnten
Einfache alte Makefiles. Es ./script.shsei denn, Ihr ist sehr kompliziert, möchten Sie vielleicht make verwenden. Es kann später skaliert werden, um mehr Aufgaben zu erledigen, und ist ein gängiges Erstellungswerkzeug.
Sie können Vim Awesome verwenden , um nach weiteren Plugins zu suchen, die möglicherweise hilfreich sind.
Fazit
Persönlich integriere ich :makeund den Quickfix in meinen eigenen Workflow. Ich glaube, dass es sich lohnt, die Ergebnisse Ihres Build-Prozesses und die Fehler zu erfassen. Als zusätzlichen Bonus werden Sie möglicherweise mit der Quickfix-Liste vertraut und können die Liste für andere Anwendungen wie verwenden :grep.
Ich habe darüber nachgedacht, :makeals ich darauf geantwortet habe, aber ich habe es nicht aufgenommen. Es ist eine bessere Idee, make fore zu verwenden, um Dinge zu kompilieren.
EvergreenTree
wie man das autocmd ändert, um makeprg nur auf einer bestimmten Akte laufen zu lassen.
execute "!./make.sh"
mitexecute "!./make.sh >/dev/null 2>&1"
Hilfe? Hiermit werden alle Ausgaben des Befehls an umgeleitet/dev/null
. Weitere Informationen zur Weiterleitung in bash finden Sie unter tldp.org/LDP/abs/html/io-redirection.html .Die Antwort auf Ihre direkte Frage lautet genauso wie bei @EvergreenTree. Ich habe jedoch das Gefühl, dass Ihnen einige der in Vim integrierten Tools zum Erstellen / Kompilieren / Flusen von Projekten fehlen. Vor allem
:make
und die Quickfix-Liste.Was bringt
:make
uns die Nutzung ?Mithilfe von
:make
können Sie Ihre Fehler in einer Liste sammeln, die als Quickfix-Liste bezeichnet wird. Mit dem Quickfix können Sie zwischen den Fehlern in Ihren Dateien navigieren, sodass Sie direkt zu der Stelle springen, an der der Compiler den Fehler meldet (praktisch, oder?).:machen
Läuft,
:make
wird das make-Programm ausgeführt'makeprg'
.'errorformat'
Analysieren Sie dann die Ausgabe mit und fügen Sie jeden Eintrag in die Quickfix-Liste ein.Der Standardwert ist
'makeprg'
normalerweise dermake
Befehl, der a ausführtMakefile
. Sie können dies jedoch'makeprg'
über den:compiler
Befehl ändern oder direkt einstellen.Sie können auch zusätzliche Argumente an übergeben
:make
. z.B:make clean
Hinweis: Beim Ausführen
:make
wird häufig die Ausgabe des Befehls am unteren Bildschirmrand mit der Aufforderung angezeigt, die Eingabetaste zu drücken. Drücken Sie einfach die Eingabetaste, da alle Ausgaben in der Quickfix-Liste verfügbar sind. Sie können dies unterdrücken, indem Sie:silent
z:silent make
.Ein gebräuchlicher benutzerdefinierter Befehl für ein stilles Make lautet:
Quickfix-Liste
Nachdem Sie ausgeführt haben, enthält
:make
Ihre Quickfix-Liste die Ausgabe des Compilers.Verwenden Sie den folgenden Befehl, um in der Quickfix-Liste zu navigieren.
:copen
um das Quickfix-Fenster zu öffnen:cclose
um das Quickfix-Fenster zu schließen:cnext
/:cprev
, um zum nächsten / vorherigen Element zu wechseln:cc
um den aktuellen Fehler unten auszudrucken oder:cc 3
einen bestimmten Fehler in diesem Beispiel anzuzeigen 3Persönlich benutze ich Tim Popes unbeeinträchtigtes Plugin, um in der Quickfix-Liste zu navigieren.
Was ist mit
:make
automatischem und leisem Laufen ?Sie können dies mit einem
:autocmd
wie Sie tun , wo.Als Bonus habe ich beim Öffnen des Quickfix-Fensters hinzugefügt,
:cwindow
ob Fehler vorliegen.Hinweis: Sollte mit diesem
BufWritePost
Dateimuster auf der AutocMD genauer sein, damit nicht verwandte Dateien nicht erstellt werden.Gibt es noch mehr ?!
Hierfür werden nur einige der in Vim integrierten Befehle sowie einige automatische Befehle zum Überzeugen verwendet. Es gibt natürlich Plugins und Tools, die Ihnen helfen könnten
:make
Jobs asynchron ausgeführt werden.:write
../script.sh
sei denn, Ihr ist sehr kompliziert, möchten Sie vielleicht make verwenden. Es kann später skaliert werden, um mehr Aufgaben zu erledigen, und ist ein gängiges Erstellungswerkzeug.Fazit
Persönlich integriere ich
:make
und den Quickfix in meinen eigenen Workflow. Ich glaube, dass es sich lohnt, die Ergebnisse Ihres Build-Prozesses und die Fehler zu erfassen. Als zusätzlichen Bonus werden Sie möglicherweise mit der Quickfix-Liste vertraut und können die Liste für andere Anwendungen wie verwenden:grep
.Weitere Hilfe finden Sie unter:
quelle
:make
als ich darauf geantwortet habe, aber ich habe es nicht aufgenommen. Es ist eine bessere Idee, make fore zu verwenden, um Dinge zu kompilieren.