ดำเนินการ gofmt ในไฟล์บันทึกใน IntelliJ


91

ฉันใช้ IntelliJ กับปลั๊กอิน Golang เป็นไปได้หรือไม่ที่จะกำหนดค่า IDE ให้รัน gofmt ในการบันทึกไฟล์


3
ฉันขอแนะนำให้ใช้godoc.org/golang.org/x/tools/cmd/goimportsแทน gofmt มาตรฐาน Goimports ไม่เพียง แต่เรียกใช้ gofmt เท่านั้น แต่ยังแก้ไขการนำเข้าของคุณด้วย
David Brophy

คำตอบ:


136

แน่นอนคุณสามารถ.

  1. ติดตั้งปลั๊กอิน File Watchers
  2. เปิด "Preferences-> Tools-> File Watchers" และเพิ่มผู้เฝ้าดูใหม่
  3. ตั้งFile Type: Go, Program: เส้นทางของ abosolute gofmt, Arguments:-w $FilePath$
  4. คลิก OK

ป้อนคำอธิบายภาพที่นี่


4
สิ่งนี้จะฟอร์แมตทุกไฟล์ใน repo ของฉันเสมอแม้แต่ Godeps / * ดังนั้นฉันจึงฮาร์ดโค้ดเส้นทางของฉันแทน มีวิธีใดในการใช้ $ FilePath $ โดยไม่ต้องจัดรูปแบบซ้ำทุกไฟล์ใน repo ทุกครั้ง? ดูเหมือนว่า FilePath กำลังมีเอฟเฟกต์โดมิโนสำหรับฉัน
jayunit100

1
@ jayunit100 คุณสามารถกำหนดค่าพารามิเตอร์ขอบเขต 1. เพิ่มขอบเขตภายใน 2. ตั้งชื่อและตั้งค่ารูปแบบเป็น: file [$ proj]: * / &&! file [$ proj]: Godeps // *! ภาพรวม
หยี

1
สิ่งนี้ไม่อนุญาตให้ฉันแก้ไขไฟล์ของฉัน เมื่อฉันพยายามเพิ่มบรรทัดใหม่เพื่อเขียนโค้ดโปรแกรมจะนำฉันกลับไปที่บรรทัดก่อนหน้าและลบบรรทัดใหม่ของฉัน ฉันจะหยุดมันได้อย่างไร หมายเหตุ: การใช้ phpstorm
bia.migueis

6
ไม่เป็นไรฉันคิดออกแล้ว "ซิงค์ไฟล์ทันที" จะทำให้ fmt ทำงานทันทีที่คุณทำการเปลี่ยนแปลงใด ๆ เพียงแค่ยกเลิกการเลือกและจะทำงานเฉพาะในการบันทึกไฟล์ (หรือหน้าต่างไม่โฟกัส)
bia.migueis

1
โปรดทราบว่าคำตอบนี้ค่อนข้างล้าสมัย: ตอนนี้ปลั๊กอิน File Watchers มีตัวเฝ้าดู "go fmt" ที่สร้างไว้ล่วงหน้าซึ่งคุณสามารถเพิ่มได้โดยไม่จำเป็นต้องทำงานมากเลย
Aaron Shaver

61

Gogland EAP 16เลิกการกระทำที่เกี่ยวกับการบันทึกและแทนที่พวกเขาด้วยนักดูไฟล์ปลั๊กอิน

หากคุณได้กำหนดค่า On Save actions ไว้ก่อนหน้านี้ IDE จะแจ้งให้คุณติดตั้งปลั๊กอินและกำหนดค่าทุกอย่างโดยอัตโนมัติ หากคุณต้องการตั้งค่าตั้งแต่ต้นด้วยตัวเองให้ตรวจสอบว่าคุณมีปลั๊กอิน File Watchers หรือไม่และหากไม่ได้ติดตั้ง

เปิดใช้งาน gofmt:

  1. Settings | Tools | File Watchersไปที่
  2. คลิกที่ปุ่มและเลือก+go fmt
  3. ค่าเริ่มต้นเป็นสิ่งที่ดี
  4. ในตัวเลือกขั้นสูงเลือก:
    • บันทึกไฟล์ที่แก้ไขโดยอัตโนมัติเพื่อเรียกผู้เฝ้าดู
    • ทริกเกอร์ผู้เฝ้าดูการเปลี่ยนแปลงภายนอก
  5. คลิกตกลง!

Config

คุณสามารถทำเช่นเดียวกันสำหรับและgoimportsgometalinter


8
จริงๆแล้วมันดีกว่าที่จะตั้งค่า goimports เท่านั้นแทนที่จะเป็น go fmt เพราะมันยังทำ fmt ตามที่ระบุไว้ในเอกสาร goimports: "นอกเหนือจากการแก้ไขการนำเข้าแล้ว goimports ยังจัดรูปแบบโค้ดของคุณในรูปแบบเดียวกับ gofmt เพื่อให้สามารถใช้แทนได้ สำหรับเบ็ด gofmt-on-save ของบรรณาธิการของคุณ "
dux2

2
นี่คือคำตอบที่ถูกต้องสำหรับ Goland ณ เดือนตุลาคม 2018
George Aristy

54

หากคุณใช้ Gogland คุณมีตัวเลือกในการบันทึกภายใต้การตั้งค่า

ป้อนคำอธิบายภาพที่นี่


1
gogland ไม่เหมือนกับปลั๊กอิน go
นักสืบ

เกือบจะเหมือนกันเช่นเดียวกับ python plugin vs pycharm ข้อแตกต่างที่เป็นไปได้เพียงอย่างเดียวคือความล่าช้าในการอัปเดต อื่น ๆ แล้วสิ่งนี้ - มันมีคุณสมบัติที่เหมือนกันทุกประการ
Alex Pavlenko

25
กลไกการบันทึกถูกเลิกใช้งานและจะถูกลบออกในอนาคต ใช้ปลั๊กอิน File Watchers แทน
Zangetsu

3
แต่แม้ใน GoLand ล่าสุดฉันไม่เห็นตัวเลือกนี้ แม้ว่าเมื่อคลิกขวาที่ชื่อไฟล์ภายใต้ "Go" ฉันสามารถ fmt ไฟล์ได้ แต่ฉันไม่เห็นตัวเลือกในการเปิดใช้งานระหว่างการบันทึกอัตโนมัติ
วิศวกรที่อยากรู้อยากเห็น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.