ตัดแต่งช่องว่างต่อท้ายใน Xcode


105

มีวิธีบังคับให้ Xcode ตัดช่องว่างต่อท้ายเมื่อฉันบันทึกไฟล์หรือไม่

ฉันใช้เวอร์ชัน 3.1.3 ถ้าเป็นเช่นนั้น

คำตอบ:


22

คุณสามารถสร้างสคริปต์และผูกเข้ากับแป้นพิมพ์ลัด:

  • เลือกเมนูสคริปต์> แก้ไขสคริปต์ผู้ใช้ ...
  • กดปุ่ม + แล้วเลือกNew Shell Script
  • ตั้งชื่อเป็น "Strip Trailing Spaces" และตั้งทางลัดเช่น ⌃⇧R
  • ตั้งค่า Input เป็น "Selection" และ Output เป็น "Replace Selection"

จากนั้นป้อนสคริปต์ต่อไปนี้:

#!/usr/bin/perl

while (<>) {
    s/\s+$//;
    print "$_\n";
}

9
ใช่ง่ายมาก ... ขอบคุณ มีวิธีใดบ้างในการเชื่อมโยงสิ่งนี้กับการบันทึกไฟล์
Alexander Gladysh

ในการทำงานกับไฟล์ทั้งหมด (ซึ่งอาจเป็นสิ่งที่คุณต้องการทำ) ให้ตั้งค่า Input เป็น "Entire Document" และ Output เป็น "Replace Document Contents" อย่างไรก็ตามจะปล่อยให้เคอร์เซอร์อยู่ที่ด้านล่างของไฟล์
SMBiggs

8
คำตอบนี้ล้าสมัยเมื่อ Xcode 4.4 ดูคำตอบโดย Martin Stolz
Basil Bourque

242

เริ่มต้นจาก Xcode 4.4 ช่องว่างจะถูกตัดโดยอัตโนมัติตามค่าเริ่มต้นเว้นแต่บรรทัดจะเป็นช่องว่างทั้งหมด คุณยังสามารถเปิดใช้งานIncluding whitespace-only linesเพื่อแก้ไขปัญหานี้ซึ่งจะไม่ใช้งานตามค่าเริ่มต้น

ไปที่ Xcode > Preferences > Text Editing > While editing

ภาพหน้าจอการตั้งค่า Xcode


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

7
ทำไมบนโลกนี้ถึงไม่เป็นค่าเริ่มต้น? หากคุณมีไฟล์อยู่แล้วที่มีช่องว่างต่อท้ายให้ทำเครื่องหมายทั้งหมดตัดบันทึกวางบันทึก
friederbluemle

สิ่งนี้จำเป็นต้องแทนที่โซลูชันสคริปต์แฮ็กในคำตอบนี้
Urda

7
การใช้ + นี้ctrl-iกับไฟล์ที่มีอยู่ทั้งหมดจะดูแลช่องว่างต่อท้าย
Kirualex

24

ฉันใช้Google Toolbox For Mac Xcode Pluginซึ่งจะเพิ่มพารามิเตอร์ "Correct whitespace on save" ที่ตัดช่องว่างต่อท้ายเพื่อบันทึก ฉันพลาดสิ่งนั้นไปมากจากอีแมค


1
ฉันใช้ปลั๊กอินนี้เช่นกัน มันทำตามที่พูด
นาธาน

จะสมบูรณ์แบบน่าเสียดายที่มันไม่ทำงานบน Xcode 4 ในขณะนี้ :(
deepwell

6
ตอนนี้เรามีการรองรับ Xcode 4 พื้นฐานแล้ว ดูปลั๊กอินใหม่
dmaclach

1
ฉันจะหาพารามิเตอร์ "Correct whitespace on save" ได้ที่ไหน
jhasse

ในที่สุดฉันก็จัดการให้ GTM ทำงานบน Xcode 4.3.2 ได้ แต่คำแนะนำในการติดตั้งจาก GTM wiki ดูเหมือนจะไม่ถูกต้อง แทนที่จะใส่. xcplugin ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins(ตามคำแนะนำของ Google) ฉันต้องใส่มัน/Applications/Xcode.app/Contents/PlugInsและรีสตาร์ท Xcode
Kristofer Sommestad

3

สำหรับ Xcode 8 ฉันได้ติดตั้งปลั๊กอินSwimat Xcode สำหรับการจัดรูปแบบโค้ด Swift ซึ่งจะลบช่องว่างต่อท้ายและเส้นเว้นวรรคเท่านั้น

วิธีการติดตั้ง

  1. ติดตั้งผ่าน homebrew-cask:

    brew cask install swimat
  2. ดาวน์โหลดแอปโดยตรง:
    https://github.com/Jintin/Swimat/releases/download/v1.3.5/Swimat.zip

  3. โคลนextensionสาขาและเก็บถาวรไปยัง Mac App

การใช้งาน

เมื่อติดตั้งแล้วคุณสามารถเรียกใช้ Swimat ใน Xcode Editor -> Swimat -> Formatผ่าน


เครื่องมือนี้อย่าลบบรรทัดว่าง
Mehdico

1

สิ่งนี้ไม่สามารถทำได้ใน Xcode 3.2

แก้ไข:

ฉันตอบคำถามนี้เพื่อให้สั้น ๆ เพราะมีวิธีการทำเช่นนี้ไม่ถูกต้อง

แน่นอนว่าเนื่องจากเป็นซอฟต์แวร์คุณสามารถทำอะไรก็ได้: เริ่มต้นด้วยการแฮ็กตัวจัดการอินพุตหรือวิธีการแทรกโค้ดอื่น ๆ เพื่อสกัดกั้นแป้นพิมพ์แบบกว้างของระบบคุณสามารถปรับเปลี่ยนระบบในพื้นที่ของคุณให้ทำอะไรได้ตลอดเวลา คุณสามารถตั้งค่าการดำเนินการโฟลเดอร์ Applescript (arrgh) หรือใช้การเรียกใช้ปีศาจและสิ่งอำนวยความสะดวก FSEvents เพื่อดูไฟล์ซอร์สโค้ดของคุณ

นอกจากนี้คุณยังสามารถเพิ่มสคริปต์สองสามรายการใน Xcode (สคริปต์ผู้ใช้ในเมนูขั้นตอนของสคริปต์ในเป้าหมายการดำเนินการที่กำหนดเองในตัวจัดระเบียบแม้กระทั่งความเป็นไปได้ที่สคริปต์เริ่มต้นจะไม่ทราบแน่ชัด) แต่โซลูชันทั้งหมดเหล่านี้มีข้อบกพร่องเนื่องจากเกี่ยวข้องกับ ผู้ใช้หรือการตั้งค่าแบบกำหนดเองบนเครื่องของผู้ใช้

ฉันไม่ทราบวิธีแก้ปัญหาที่ใช้งานได้หลังจากตรวจสอบโครงการจาก SCM ฉันเชื่อว่าจำเป็นสำหรับสิ่งนี้และสคริปต์การปรับแต่งที่คล้ายกันฉันจึงยื่นข้อบกพร่อง (เรดาร์ 7203835, "คุณลักษณะ: สคริปต์ผู้ใช้เพิ่มเติมทริกเกอร์ในเวิร์กโฟลว์ Xcode") ฉันยังไม่ได้รับคำติชมใด ๆ

นี่คือข้อความทั้งหมดของรายการเรดาร์:

จะมีประโยชน์หากมีสถานที่เพิ่มเติมในการเรียกใช้สคริปต์ใน Xcode

ตัวอย่าง:

  1. Pre build scripts
    สามารถใช้ Pre build scripts เพื่อสร้างสิ่งที่จำเป็นต้องมีเช่นไฟล์ * .xcconfig หรือ config.h headers ไม่สามารถทำได้ด้วย "ขั้นตอนการสร้างสคริปต์การเรียกใช้" เนื่องจากการติดตามการอ้างอิงจะเกิดขึ้นก่อนที่จะเริ่มขั้นตอนการสร้างใด ๆ

  2. โพสต์สคริปต์บิลด์
    คล้ายกับด้านบน แต่ทำงานหลังจากสร้างเสร็จแล้ว (รวมถึงการลงนามโค้ด ฯลฯ ) มีประโยชน์สำหรับบรรจุภัณฑ์เพิ่มเติมการตรวจสอบความถูกต้อง ฯลฯ

  3. สคริปต์ Pre / Post SCM Commit
    เพื่อตรวจสอบความสมบูรณ์ของโครงการ

  4. สคริปต์บันทึกไฟล์ล่วงหน้า / โพสต์
    เพื่อตรวจสอบ / แก้ไขไฟล์ก่อนบันทึก เช่นเรียกใช้ cody beautifiers

  5. การดำเนินการโครงการแบบกำหนดเอง
    ฉันตระหนักดีถึงความสามารถของผู้จัดในการกำหนดการกระทำโดยพลการ แต่นี่เป็นคุณลักษณะต่อผู้ใช้ (ไม่ใช่ส่วนหนึ่งของโครงการ) ฉันต้องการกำหนดการดำเนินการเช่น build หรือ clean ที่ปรากฏในเมนู build และเป็นส่วนหนึ่งของโปรเจ็กต์


แก้ไขเพื่อตอบว่าเหตุใดวิธีแก้ปัญหาจึงไม่น่าพอใจในกรณีนี้
Nikolai Ruhe

2
ขอบคุณ. ในขณะที่ฉันชอบทำในวิธีที่เหมาะสม แต่ฉันก็จัดการเกี่ยวกับการแฮ็กที่ไม่ล่วงล้ำเกินไป ช่องว่างพิเศษเหล่านี้น่ารำคาญจริงๆ
Alexander Gladysh


0

วิธีที่ง่ายและดีที่สุดโดยไม่ต้องใช้สคริปต์แฮ็กและอื่น ๆ อีกมากมาย เพียงไปที่ค้นหาและแทนที่วิธีที่ดีที่สุดและง่ายดายโดยไม่ต้องใช้สคริปต์แฮ็กและอื่น ๆ อีกมากมาย เพียงไปที่ค้นหาและแทนที่แล้วกด "alt / option + space" แล้วกดปุ่ม "space" ในแถบแทนที่จากนั้นคลิกที่แทนที่ทั้งหมด มันจะแทนที่ช่องว่างด้วยช่องว่างปกติและคำเตือน / ข้อผิดพลาดจะหายไป !!


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