Führen Sie gofmt beim Speichern von Dateien in IntelliJ aus

84

Ich benutze IntelliJ mit dem Golang-Plugin. Ist es möglich, die IDE so zu konfigurieren, dass gofmt beim Speichern von Dateien ausgeführt wird?

Myles McDonnell
quelle
3
Ich würde empfehlen, godoc.org/golang.org/x/tools/cmd/goimports anstelle des Standard-Gofmt zu verwenden. Goimports führt nicht nur gofmt aus, sondern korrigiert auch Ihre Importe.
David Brophy

Antworten:

127

Natürlich kannst du.

  1. Installieren Sie das File Watchers Plugin
  2. Öffnen Sie "Einstellungen-> Extras-> Datei-Watcher" und fügen Sie einen neuen Watcher hinzu
  3. set File Type: Go, Program: der absolute Pfad von gofmt, Arguments:-w $FilePath$
  4. klicken OK

Geben Sie hier die Bildbeschreibung ein

yee
quelle
4
Dadurch wird immer jede Datei in meinem Repo neu formatiert, auch Godeps / *. Also habe ich stattdessen meinen Weg fest codiert. Gibt es eine Möglichkeit, $ FilePath $ zu verwenden, ohne jedes Mal jede Datei im Repo rekursiv zu formatieren? FilePath scheint für mich einen Dominoeffekt zu haben.
Jayunit100
1
@ jayunit100 Sie können den Scope- Parameter konfigurieren. 1. Fügen Sie einen lokalen Bereich hinzu. 2. Benennen Sie ihn und setzen Sie das Muster auf: file [$ proj]: * / &&! file [$ proj]: Godeps // *! Schnappschuss
yee
1
Dadurch kann ich meine Dateien nicht bearbeiten. Wenn ich versuche, eine neue Zeile hinzuzufügen, um etwas mehr zu codieren, bringt mich das Programm zur vorherigen Zeile zurück und löscht meine neue Zeile. Wie höre ich damit auf? Hinweis: mit phpstorm
bia.migueis
6
egal, ich habe es herausgefunden. "Sofortige Dateisynchronisierung" bewirkt, dass fmt ausgeführt wird, sobald Sie Änderungen vornehmen. Deaktivieren Sie es einfach und es wird nur beim Speichern von Dateien (oder beim Aufheben der
Fokussierung des
1
Heads up, diese Antwort ist jetzt etwas veraltet: Das File Watchers-Plugin verfügt jetzt über einen vorgefertigten "go fmt" -Überwacher, den Sie hinzufügen können, ohne dass Sie viel arbeiten müssen.
Aaron Shaver
59

Gogland EAP 16 hat die On Save-Aktionen abgelehnt und durch das File Watchers-Plugin ersetzt .

Wenn Sie zuvor Aktionen zum Speichern konfiguriert haben, werden Sie von der IDE aufgefordert, das Plugin zu installieren und alles automatisch zu konfigurieren. Wenn Sie es selbst von Grund auf neu einrichten möchten, überprüfen Sie, ob Sie das File Watchers-Plugin haben, und installieren Sie es, falls nicht.

Gofmt aktivieren:

  1. Gehe zu Settings | Tools | File Watchers.
  2. Klicken Sie auf die +Schaltfläche und wählen Sie go fmt.
  3. Die Standardwerte sind gut.
  4. Wählen Sie unter Erweiterte Optionen Folgendes aus:
    • Speichern Sie bearbeitete Dateien automatisch, um den Watcher auszulösen
    • Lösen Sie den Watcher bei externen Änderungen aus
  5. OK klicken!

Konfig

Sie können dasselbe für goimportsund tun gometalinter.

David Miguel
quelle
8
Eigentlich ist es besser, nur goimports anstelle von go fmt einzurichten, da es auch fmt ausführt, wie in den goimports-Dokumenten angegeben: "Zusätzlich zum Korrigieren von Importen formatiert goimports Ihren Code im gleichen Stil wie gofmt, sodass er als Ersatz verwendet werden kann für den Gofmt-on-Save-Hook Ihres Editors "
dux2
2
Dies ist die richtige Antwort für Goland ab Oktober 2018
George Aristy
55

Wenn Sie Gogland verwenden, haben Sie unter Einstellungen die Option Ein Speichern

Geben Sie hier die Bildbeschreibung ein

Arun Gopalpuri
quelle
1
gogland ist nicht dasselbe wie das go plugin.
Spotter
Es ist fast das gleiche wie Python Plugin gegen Pycharm. Der einzig mögliche Unterschied ist die Verzögerung bei Updates. Abgesehen davon bietet es Ihnen genau die gleichen Funktionen.
Alex Pavlenko
23
Der Mechanismus zum Speichern ist veraltet und wird in Zukunft entfernt. Verwenden Sie stattdessen das File Watchers-Plugin
Zangetsu
3
Aber selbst im neuesten GoLand sehe ich diese Option nicht. Ich denke, wenn ich mit der rechten Maustaste auf Dateiname klicke, kann ich unter "Los" eine Datei fmt. Die Option zum Aktivieren während der automatischen Speicherung wird jedoch nicht angezeigt.
neugieriger Ingenieur