2016-08-05 13 views
1

Ich bin vor kurzem von erhabenen 3 gehen zu mvim (vim auf dem mac os) und versuche, meine Golong-Entwicklungsumgebung zu erhalten ähnlich zu meiner erhabenen Implementierung wie möglich.Golang: läuft `go build` on save mit vim (macvim) und vim-go

Innerhalb meines erhabenen Setups läuft es go build jederzeit ich die Go-Datei speichern. Dies gibt mir sofortiges Feedback, wenn ich ungenutzte Vars oder andere Informationen go build habe.

Ich versuche, zu vim zu bewegen, und frage mich, ob ich diese Funktionalität auch dort implementiert haben kann. Ich verwende vim-go, habe aber keine Einstellung gefunden, um dies zu implementieren.

Kurz gesagt, ich möchte :GoBuild auf das Speichern einer Go-Datei ausführen, während Sie vim/vim-go verwenden. Ist das möglich und wie mache ich das?

+0

Ja, aber ich bin der Suche haben GoBuild automatisch auf die Einsparung eines Go-Datei ausführen. - Bearbeitet die Frage, um das besser zu reflektieren. – user2737876

Antwort

2

ja, verwenden Sie vim autocommand:GoBuild auszuführen:

Sie Befehle angeben können automatisch ausgeführt werden, beim Lesen oder eine Datei zu schreiben, bei der Eingabe oder einen Puffer oder ein Fenster zu verlassen, und wenn Verlassen Vim. Der übliche Ort, um Autokommandos zu setzen, ist in Ihrer .vimrc oder .exrc Datei.

Führen Sie den folgenden Befehl ein:

:autocmd BufWritePre *.go :GoBuild

Jetzt jedes Mal, wenn Sie Ihre Go-Datei mit :w speichern :GoBuild laufen.
Der Ereignistyp ist BufWritePre, was bedeutet, dass das Ereignis überprüft wird, bevor Sie *.go-Datei schreiben.

BufWritePre Starten den gesamten Puffer in eine Datei
BufWritePost nach dem Schreiben der gesamten Puffer in eine Datei

und schreiben:

Wenn Ihre .vimrc Datei wird übrigens zweimal, Die Autokommandos werden zweimal angezeigt: . Um dies zu vermeiden, setzen Sie diesen Befehl in Ihre.vimrc, bevor definieren automatischen Befehle:

:autocmd! " Remove ALL autocommands for the current group. 

Wenn Sie möchten, um alle automatischen Befehle nicht zu entfernen, können Sie stattdessen eine Variable verwenden, um sicherzustellen, dass Vim die automatischen Befehle enthält nur einmal:

:if !exists("autocommands_loaded")  
: let autocommands_loaded = 1  
: au ... 
:endif 

wie folgt aus (diese Startdatei setzen am Ende Ihres vim):

:if !exists("autocommands_loaded") 
: let autocommands_loaded = 1 
: autocmd BufWritePost *.go :GoBuild 
:endif 

ref:
http://vimdoc.sourceforge.net/htmldoc/autocmd.html
http://learnvimscriptthehardway.stevelosh.com/chapters/12.html