วิธีลบช่องว่างต่อท้ายอัตโนมัติใน Eclipse


422

คำถามมีสองส่วนซึ่งหนึ่งในนั้นมีคำตอบอยู่แล้ว

  1. วิธีการอัตโนมัติลบช่องว่างต่อท้ายจากไฟล์ทั้งหมดได้รับการแก้ไข ? -> คำตอบ: ใช้ปลั๊กอิน AnyEditซึ่งสามารถตั้งค่าให้ทำเช่นนั้นกับการบันทึกลงในไฟล์
  2. วิธีลบช่องว่างต่อท้ายอัตโนมัติจากบรรทัดที่ฉันเปลี่ยนเท่านั้น -> สิ่งนี้ฉันไม่รู้และจะขอบคุณความช่วยเหลือใด ๆ

97
ฉันมีความสุขถ้าฉันสามารถโน้มน้าวให้ Eclipse หยุดเพิ่มช่องว่างต่อท้ายที่ฉันไม่ได้พิมพ์
divegeek

5
คุณไม่จำเป็นต้องมีปลั๊กอิน เพียงใช้ C ++ -> Editor -> บันทึกการกระทำ โดยทั่วไป -> Editors -> Editors ข้อความ -> แสดงอักขระช่องว่าง (คลิกเพื่อดูการตั้งค่าโดยละเอียด) มีประโยชน์อย่างยิ่ง
Trass3r

3
การดำเนินการบันทึกเริ่มต้นจะไม่ตัดช่องว่างต่อท้ายในความคิดเห็น Java Doc นอกจากนี้มันถูก จำกัด ด้วยความจริงที่ว่ามันทำงานกับไฟล์ Java เท่านั้น เรามีระบบตรวจสอบรหัสซึ่งทำเครื่องหมายช่องว่างสีขาวต่อท้ายเป็นข้อผิดพลาด AnyEdit นั้นมีค่ายิ่งในการดูแลช่องว่างต่อท้ายสำหรับไฟล์ทุกประเภท นอกจากนี้อาจเป็นประโยชน์ในการค้นหาข้อ จำกัด ของ บริษัท ของคุณสำหรับซอฟต์แวร์ส่วนที่สาม ปลั๊กอิน AnyEdit มีสิทธิ์ใช้งาน EPL ( opensource.org/licenses/eclipse-1.0.php ) [จากที่นี่: andrei.gmxhome.de/anyedit/index.html]
Ashutosh Jindal

1
ฉันไม่สามารถเข้าใจได้ว่าทำไมช่องว่างสีขาวที่ส่วนท้ายของบรรทัดถูกนำออกไปจนกระทั่งฉันเห็นคำถามของคุณและพบว่ามันเป็นเพราะ AnyEditPlugin ขอบคุณ!
Tzafrir

คำตอบ:


142
  1. การลบช่องว่างออกจากไฟล์ทั้งหมดที่กำลังแก้ไข :

Preferences-> Java-> Editors-> Save Actions-> การตรวจสอบPerform the selected actions on save-> การตรวจสอบAdditional actions-> คลิกConfigure..-> ไปที่Code organizingแท็บ -> การตรวจสอบRemove trailing whitespace-> All linesเลือก

  1. การลบช่องว่างออกจากบรรทัดที่ฉันเปลี่ยนเท่านั้น :

Preferences-> Java-> Editor-> Save Actions-> ตรวจสอบ " Perform the selected actions on save-> การตรวจสอบFormat source code-> Format edited linesเลือก

โปรดทราบว่าไม่จำเป็นต้องคลิกConfigure the formatter settings on the Formatter page- รูปแบบรหัสทั้งหมดจะรวมการลบช่องว่างต่อท้ายโดยอัตโนมัติ อย่างน้อยฉันไม่สามารถหาการตั้งค่าสำหรับการนี้ในการกำหนดค่าฟอร์แมตและมันทำงานออกจากกล่องในตัวอนุสัญญา Java คราสคราส 2.1 รูปแบบเช่นเดียวกับGoogleStyle

เมื่อใช้การตั้งค่านี้คุณจะต้องปิดโซลูชันเพื่อส่วนที่ 1 ของคำถามด้วย

Eclipse version checked: 4.5.2, 4.11

ฉันจะกำหนดรูปแบบได้อย่างไร ฉันจะใช้ลิงก์ตัวจัดรูปแบบหรือปุ่มกำหนดค่าหรือไม่
Vijay Kotari

ตัวเลือกนี้จะปรากฏใน PDT สำหรับ PHP เช่นกันภายใต้บันทึกการกระทำ
thaddeusmt

1
@VijayKotari คำตอบถูกแก้ไขแล้ว - ไม่จำเป็นต้องกำหนดรูปแบบ
ม.ค. Żankowski

350

ฉันคิดว่าคำถามของคุณเกี่ยวกับรหัส Java หากเป็นเช่นนั้นคุณไม่จำเป็นต้องมีปลั๊กอินพิเศษใด ๆ ในการทำ 1) คุณก็สามารถไปที่การตั้งค่า -> ชวา -> Editor -> บันทึกการดำเนินการและการกำหนดค่าให้ลบช่องว่างต่อท้าย

ด้วยเสียงของมันคุณยังต้องการที่จะทำให้การตั้งค่าทั้งทีมใช่ไหม? เพื่อให้ชีวิตง่ายขึ้นและหลีกเลี่ยงการจำการตั้งค่าทุกครั้งที่คุณมีพื้นที่ทำงานใหม่คุณสามารถตั้งค่าการดำเนินการบันทึกเป็นการตั้งค่าเฉพาะโครงการที่ได้รับการจัดเก็บไว้ใน SCM ของคุณพร้อมกับรหัส

เพื่อที่จะทำเช่นนั้นคลิกขวาในโครงการของคุณและไปที่Properties -> Java Editor -> บันทึกการดำเนินการ จากตรงนั้นคุณสามารถเปิดใช้งานการตั้งค่าเฉพาะโครงการและกำหนดค่าให้ลบช่องว่างต่อท้าย (ท่ามกลางสิ่งที่มีประโยชน์อื่น ๆ )

หมายเหตุ : ตัวเลือกนี้ถูกลบใน Eclipse Kepler (4.3) และรุ่นต่อไปนี้

NB # 2:ตัวเลือกที่ดูเหมือนจะกลับมาใน Eclipse Luna -Luna Service Release 1a (4.4.1)


2
ขอบคุณ gcastro - ง่ายกว่า AnyEdit น่าเสียดายที่มีการแก้ไขทั้งไฟล์ .. ยังไม่รู้ว่าจะทำอย่างไรกับเฉพาะบรรทัดที่ฉันเปลี่ยนไป - ดูเหมือนว่ามันอาจเป็นไปไม่ได้ในตอนนี้
ม.ค. Żankowski

7
เหมาะสำหรับ Java; ดีสำหรับ C / C ++ เช่นกัน แต่ไม่ใช่สำหรับ Python ใน PyDev
Craig McQueen

14
สำหรับ Python ใน PyDev ฉันได้ทำคำขอคุณสมบัตินี้แล้ว ดู: sourceforge.net/tracker/…
Craig McQueen

5
FYI ... แนวคิดเดียวกันสำหรับ PHP การตั้งค่า -> PHP -> ตัวแก้ไข -> บันทึกการกระทำ
seanmrafferty

1
ฉันไม่รู้ว่ามันใช้งานได้หรือไม่ แต่ดูเหมือนจะไม่ทำงานใน Eclipse รุ่นล่าสุด (Kepler) คุณสามารถรันฟอร์แมตเตอร์บนบรรทัดที่แก้ไขเท่านั้น แต่ช่องว่างการตัดแต่งถูก จำกัด ไว้ที่ทุกบรรทัดหรือละเว้นบรรทัดว่าง - น่ารำคาญจริงๆ
Thor84no

73

คุณไม่ต้องการปลั๊กอินใด ๆ ตัวอย่างเช่นหากคุณใช้รหัส JAVA คุณสามารถลบ whitespaces ต่อท้ายที่กำหนดค่าการดำเนินการบันทึก:

อุปราคา 3.6

Preferences-> Java-> Editors-> Save ActionsตรวจสอบPerform the selected actions on save-> ตรวจสอบAdditional actions-> คลิกที่Configure..ปุ่ม

ในCode organizingแท็บตรวจสอบRemove trailing whitespace


4
นี่เป็นคำตอบแรกที่แนะนำโดยเฉพาะในหัวข้อ "การกระทำเพิ่มเติม" สำหรับ "ลบช่องว่างต่อท้าย" ขอบคุณ
DavidRR

7
ใช้งานได้กับไฟล์. java เท่านั้นฉันมักจะทำงานร่วมกับการขยายจำนวนมาก
Eildosa

ใช้งานได้กับ Eclipse 4.12
Matilda Smeds

46

PyDevสามารถทำได้โดยCtrl+ Shift+ Fหากคุณมีตัวเลือกการจัดรูปแบบโค้ดที่กำหนดให้ทำหรือโดยduring saving:

Eclipse-> Window-> Preferences-> PyDev-> Editor-> Code Style-> Code Formatter:

ฉันใช้อย่างน้อยเหล่านี้:

  • จัดรูปแบบอัตโนมัติก่อนบันทึก
  • ตัดแต่งเส้นที่ถูกต้อง?
  • เพิ่มบรรทัดใหม่ที่ท้ายไฟล์

5
นี้ไม่ครอบคลุมถึงคำถามของการลอกพื้นที่เฉพาะจากสายการแก้ไข นอกจากนี้ยังมีคุณสมบัติที่อันตรายเพราะมันจะทำงานทุกส่วนของตัวเลือกรหัสฟอร์แมตและเป็นตัวเลือกที่ไม่ถูกตรวจสอบไม่ได้เช่นเดียวกับ "ไม่สนใจ / ไม่ได้ใช้" เช่นถ้า "ใช้ช่องว่างหลังเครื่องหมายจุลภาค" ไม่ได้ตรวจสอบการจัดรูปแบบโค้ดจะเป็นการลบช่องว่างเหล่านั้นแทนที่จะไม่สนใจตัวเลือก
JCotton

7
มีตัวเลือกใหม่ในตัวจัดรูปแบบโค้ด PyDev: เมื่อบันทึกให้ใช้การจัดรูปแบบในบรรทัดที่เปลี่ยนแปลงเท่านั้น
warvariuc

2
-1 สำหรับการให้คำตอบที่กว้างเกินไป - คำถามนั้นเกี่ยวกับพื้นที่สีขาว การเปิดใช้งานการจัดรูปแบบรหัสอัตโนมัติหมายความว่าแหล่งที่มาของคุณจะเริ่มมีสิ่งที่ไม่ได้วางแผนไว้ในนั้นทำให้เกิดความยุ่งเหยิงเพราะการกระทำนั้นมีสิ่งที่ไม่เกี่ยวข้องกับชื่อเรื่องการกระทำ
Erik Kaplun


19

คุณสามารถแมปคีย์ใน Eclipse เพื่อลบช่องว่างต่อท้ายในไฟล์ทั้งหมดด้วยตนเอง แต่จะมีการร้องขอแทนการบันทึกโดยอัตโนมัติเมื่อมีการร้องขอ (การตั้งค่า / คีย์จากนั้นแมปชุดของคีย์ไปที่ File / Remove Trailing Whitespace) สิ่งนี้มีประโยชน์หากคุณต้องการฆ่าเชื้อไฟล์ใหม่ทั้งหมด แต่เก็บรหัสดั้งเดิมไว้โดยไม่ถูกแตะต้อง

กลยุทธ์อีกอย่างคือการเปิดใช้งานการแสดงภาพของช่องว่างดังนั้นอย่างน้อยคุณจะรู้เมื่อคุณเพิ่มช่องว่างที่ต่อท้าย เท่าที่ฉันรู้ไม่มีวิธีที่จะแสดงเฉพาะช่องว่างต่อท้ายแม้ว่า แต่ฉันจะดีใจที่ได้รับการพิสูจน์ผิด


ขอบคุณมากสำหรับคำตอบนี้! จนถึงตอนนี้เป็นวิธีเดียวที่ฉันได้พบกับปลั๊กอิน Aptana
Igor Zinov'yev

11

โดยย่อสำหรับบรรณาธิการที่ไม่สนับสนุนการลบช่องว่างต่อท้ายเลย (เช่นตัวแก้ไข XML) คุณสามารถลบออกจากทุกบรรทัดโดยทำการค้นหาและแทนที่เปิดใช้งานนิพจน์ทั่วไปจากนั้นค้นหา "[\ t] + $ "และแทนที่ด้วย" "(ว่าง) อาจมี regex ที่ดีกว่าในการทำเช่นนั้น แต่มันใช้งานได้สำหรับฉันโดยไม่จำเป็นต้องติดตั้ง AnyEdit


9

ฉันจะบอกว่า AnyEdit ด้วย มันไม่ได้มีฟังก์ชั่นเฉพาะนี้ อย่างไรก็ตามหากคุณและทีมของคุณใช้คุณสมบัติ AnyEdit ในการบันทึกแต่ละครั้งดังนั้นเมื่อคุณเปิดไฟล์มันจะต้องไม่มีช่องว่างต่อท้าย

ดังนั้นหากคุณแก้ไขไฟล์นี้และหากคุณเพิ่มช่องว่างต่อท้ายใหม่ระหว่างการดำเนินการบันทึก AnyEdit จะลบเฉพาะช่องว่างใหม่เหล่านี้เนื่องจากเป็นช่องว่างต่อท้ายเฉพาะในไฟล์นี้

หากด้วยเหตุผลบางอย่างคุณต้องเก็บช่องว่างต่อท้ายบนบรรทัดที่คุณไม่ได้ทำการแก้ไขจากนั้นฉันไม่มีคำตอบสำหรับคุณและฉันไม่แน่ใจว่าคุณลักษณะประเภทนี้มีอยู่ในปลั๊กอิน Eclipse ใด ๆ ...


4
ใช่ฉันต้องการเก็บช่องว่างในบรรทัดที่ไม่ได้แก้ไขโดยฉัน .. นี่เป็นพฤติกรรมเริ่มต้นของ Intellij Idea (ลบช่องว่างในบรรทัดของฉันเก็บไว้ในรายการอื่น) และฉันต้องการรับสิ่งนั้นใน Eclipse . ขอบคุณสำหรับคำตอบ.
ม.ค. Żankowski

8

เป็นไปไม่ได้ที่จะทำใน Eclipse โดยวิธีทั่วไปในขณะนี้แต่มันสามารถเปลี่ยนแปลงได้ด้วยความรู้ Java ขั้นพื้นฐานและเวลาว่างเพื่อเพิ่มการสนับสนุนขั้นพื้นฐานสำหรับhttps://bugs.eclipse.org/bugs/show_bug.cgiนี้? id = 180349

ปัญหาที่ต้องพึ่งพา: https://bugs.eclipse.org/bugs/show_bug.cgi?id=311173



4

มีวิธีที่ง่ายมากในการทำเช่นนี้กับ sed, เครื่องมือบรรทัดคำสั่ง Unix คุณอาจสร้างมาโครใน Eclipse เพื่อรันสิ่งนี้:

sed -i 's/[[:space:]]*$//' <filename>

4

ดังที่ @ Malvineous กล่าวว่าไม่ใช่มืออาชีพ แต่เป็นการหลีกเลี่ยงวิธีการใช้วิธีการค้นหา / แทนที่เพื่อลบพื้นที่ต่อท้าย (ด้านล่างรวมถึงแท็บ U + 0009 และ whitespace U + 0020)
เพียงกด Ctrl + F (หรือคำสั่ง + F)

  1. หา [\t ][\t ]*$
  2. แทนที่ด้วยสตริงว่าง
  3. ใช้นิพจน์ทั่วไป
  4. แทนที่ทั้งหมด

พิเศษ:
สำหรับการลบช่องว่างนำค้นหา^[\t ][\t ]*แทน[\t ][\t ]*$
สำหรับลบบรรทัดว่างค้นหา^\s*$\r?\n


1
แล้วจะ[\t ]+$เป็น[\t ][\t ]*$อย่างไร
Jonah Graham

1

ฉันไม่ทราบถึงวิธีแก้ไขปัญหาสำหรับคำถามที่สองของคุณ เหตุผลก็คือมันไม่ชัดเจนว่าจะกำหนดฉันเปลี่ยนฉันเปลี่ยนเปลี่ยนเมื่อไหร่? เพียงแค่ระหว่าง 2 บันทึกหรือระหว่างการกระทำ ... โดยทั่วไป - ลืมมัน

ฉันคิดว่าคุณต้องการยึดแนวทางบางอย่าง แต่อย่าแตะต้องรหัสที่เหลือ แต่ควรใช้แนวทางโดยรวมไม่ใช่เพื่อกัดและชิ้นส่วน ดังนั้นข้อเสนอแนะของฉันคือ - เปลี่ยนรหัสทั้งหมดเป็นแนวทาง: เป็นการดำเนินการครั้งเดียว แต่ให้แน่ใจว่านักพัฒนาทั้งหมดของคุณมีปลั๊กอินเดียวกัน (AnyEdit) ด้วยการตั้งค่าเดียวกันสำหรับโครงการ


7
เนื่องจากเป็นการดำเนินการบันทึกจึงเป็นบรรทัดที่เปลี่ยนแปลงระหว่างการบันทึก Eclipse ติดตามเส้นเหล่านี้เพื่อทำเครื่องหมายในแถบด้านข้างแล้ว
starblue

0

ฉันใช้คำสั่งนี้เพื่อคอมไพล์: git config --global core.whitespace cr-at-eol

มันลบ^Mตัวละครที่ต่อท้าย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.