Sublime Text 2: ตัดแต่งช่องว่างสีขาวตามต้องการ


99

ฉันรู้ว่า Sublime Text 2 สามารถลบพื้นที่สีขาวต่อท้ายไฟล์เมื่อทำการบันทึก

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

ฉันต้องการทราบว่ามีคำสั่งใดในการดำเนินการตัดแต่งพื้นที่สีขาวตามความต้องการในไฟล์อื่นนอกเหนือจาก"Activate trimming on save > Save file > Deactivate trimming".

การค้นหาในเอกสารประกอบและใน stackoverflow ไม่ได้แสดงสิ่งที่เกี่ยวข้องดูเหมือนว่าลิงก์ทั้งหมดจะพูดถึงการตัดแต่งอัตโนมัติเมื่อบันทึก


1
สิ่งนี้ไม่ได้ตอบคำถามของคุณโดยตรง แต่อาจช่วยได้หากคุณใช้ Git สำหรับการควบคุมเวอร์ชัน$ mv .git/hooks/pre-commit.sample .git/hooks/pre-commitซึ่งฉันได้รับจากบล็อกนี้
Paul Fioravanti

97
สำหรับเพื่อน Googler: วิธีที่ไม่ต้องใช้ความต้องการคือการเพิ่มการตั้งค่านี้:"trim_trailing_white_space_on_save": true
Nate Glenn

3
เพื่อเป็นการปรับปรุงความคิดเห็นของ @Nate Glenn โปรดทราบว่าการตัดช่องว่างจาก Markdown อาจทำให้คุณมีปัญหาได้โดยเฉพาะอย่างยิ่งหากคุณตัดแต่งพื้นที่สีขาวโดยเจตนาของคนอื่นและกระทำโดยไม่สังเกตเห็น คุณสามารถแก้ไขMarkdown.sublime-settingsและปิดการใช้งานการตัดแต่งทั่วโลกเพื่อบันทึกและป้องกันอุบัติเหตุ
tehfoo

สิ่งสำคัญ: หากมีมากกว่า 1 บรรทัดระหว่าง {} วงเล็บปีกกาให้แน่ใจว่าคุณใส่ "," ไว้ที่บรรทัดด้านบนมิฉะนั้นคุณจะได้รับข้อผิดพลาดเมื่อพยายามบันทึก
slindsey3000

1
"เมื่อทำงานในทีมและยอมรับการเปลี่ยนแปลงไฟล์สิ่งนี้มีแนวโน้มที่จะสร้างความแตกต่างอย่างมากซึ่งทำให้การตรวจสอบโค้ดเพียร์ยุ่งยากมากขึ้น" ปัญหาที่ลึกซึ้งกว่านี้คือการกำหนดช่องว่างต่อท้ายไม่ควรทำให้เป็น repo ตั้งแต่แรก ตามหลักการแล้ว - แม่นยำเพราะมันสร้างแพทช์สกปรกที่คุณพูดถึง ห้ามเว้นช่องว่างต่อท้ายในมาตรฐานการเข้ารหัสของคุณและจับการกระทำด้วยช่องว่างที่ไม่ถูกต้องใน Linter / Commit hooks ของคุณ
Frank Farmer

คำตอบ:


71

ระวัง: การใช้ปลั๊กอินนี้ทำให้ Sublime Text ช้าลงอย่างมาก

ฉันใช้ปลั๊กอินTrailingSpacesสำหรับสิ่งนี้

เน้นช่องว่างต่อท้ายและลบออกในพริบตา

ST2 มีวิธีลบช่องว่างต่อท้ายโดยอัตโนมัติเมื่อบันทึกไฟล์ ขึ้นอยู่กับการตั้งค่าของคุณการไฮไลต์และ / หรือลบด้วยมืออาจสะดวกกว่า ปลั๊กอินนี้ให้แค่นั้น!

การใช้งาน: คลิก "Edit / Trailing Spaces / Delete"

หากต้องการเพิ่มการผูกคีย์ให้เปิด "ค่ากำหนด / การเชื่อมโยงคีย์ - ผู้ใช้" และเพิ่ม:

{ "keys": ["ctrl+alt+t"], "command": "delete_trailing_spaces" }

1
ใช่ฉันชอบคำตอบนี้ที่สุด ... อัพเกรดปลอดภัย + ใช้งานได้จริง - ขอบคุณ
Rob

1
ฉันสังเกตเห็นว่าคุณลักษณะ ctrl + F ในการค้นหาคำต่างๆช้าลงหลังจากที่ฉันติดตั้งปลั๊กอินนี้ดังนั้นฉันจึงลบออกคุณสามารถบอกฉันได้ไหมว่าสถานการณ์เดียวกันนี้เกิดขึ้นกับคุณหรือไม่?
dennisbot

Ctrl + Shift + T ใช้เพื่อเปิดแท็บสุดท้ายที่ปิดใน Sublime อยู่แล้ว ดังนั้นฉันชอบ Ctrl + Alt + T
Pawel

5
มีตัวเลือกที่เรียกtrailing_spaces_trim_on_saveซึ่งคุณสามารถตั้งค่าให้อยู่ในtrue Preferences > Package Settings > Trailing Spaces > Settings - Userคุณสามารถใช้สิ่งนี้แทนการผูกแป้นพิมพ์ลัดฉันคิดว่ามันดีกว่าสำหรับความต้องการของฉัน
dspacejs

คำเตือน: การเลื่อนดูไฟล์ขนาดใหญ่จะช้าลงอย่างมากเมื่อติดตั้งปลั๊กอินนี้
เรียบเรียง

68

ฉันใช้ขั้นตอนเหล่านี้สำหรับโซลูชันตามความต้องการอย่างรวดเร็วภายใน Sublime Text:

  1. ค้นหา> แทนที่ ...
  2. หาอะไร: [ \t]+\n
  3. แทนที่ด้วย: \n
  4. แทนที่ทั้งหมด

คุณสามารถทำสิ่งนี้กับไฟล์ขนาดใหญ่ผ่านไฟล์

  1. ค้นหา> ค้นหาในไฟล์ ...
  2. หา: [ \t]+\n
  3. ที่ไหน:
  4. แทนที่: \n
  5. แทนที่

5
วิธีนี้ใช้ได้กับทุกบรรทัดยกเว้นบรรทัดสุดท้าย
Joncom

1
@ จอนคอมถูกต้องเกี่ยวกับบรรทัดสุดท้าย ใน Sublime Text 3 \tดูเหมือนจะไม่ตรงกับช่องว่างดังนั้นคำตอบตามที่เขียนไว้จะลบแท็บต่อท้ายเท่านั้น ฉันคิดว่าฉันชอบ\s+\nแต่โปรดทราบว่ามันลบบรรทัดว่างด้วย หากคุณต้องการที่จะลบช่องว่างในบรรทัดสุดท้ายเช่นกันคุณสามารถเพิ่มเป็นดังนั้น:\s+\z (\s+\n|\s+\z)
canhascodez

3
([\t ]+\n|\s+\z)<- ไม่ลบบรรทัดว่าง
canhascodez

4
regex ที่ถูกต้องควรเป็น[ \t]+$และแทนที่ด้วยอะไร
Codesmith

28

คุณสามารถใช้ regex เพื่อลบช่องว่างต่อท้าย:

  1. ค้นหา> แทนที่ ...
  2. หาอะไร: [^\S\r\n]+$
  3. แทนที่ด้วย: เว้นว่างไว้
  4. คลิก 'แทนที่ทั้งหมด'

[^\S\r\n]+$คือRegexสำหรับ "อักขระช่องว่างอย่างน้อยหนึ่งตัว (ดังนั้นเว้นวรรคและแท็บ แต่ไม่ใช่ขึ้นบรรทัดใหม่โดยใช้การปฏิเสธสองครั้ง) ตามด้วยท้ายบรรทัด"

ต้องเปิดใช้นิพจน์ทั่วไป: เปิดใช้งาน regex คือกล่องโต้ตอบการค้นหา


22

นี่เป็นวิธีที่ง่ายสุด ๆ ที่ไม่ใช้ปลั๊กอินหรือการตั้งค่าและใช้ได้กับสถานการณ์ส่วนใหญ่

  1. Multi-Select และเลื่อนเคอร์เซอร์ไปที่ท้ายทุกบรรทัด
  2. CTRL-Shift กดซ้ายขวา
  3. ตอนนี้ควรเลือกช่องว่างและแท็บที่ท้ายบรรทัด กด Delete หรือ Backspace

    หมายเหตุ - อักขระพิเศษเช่น (และ + อาจถูกเลือกไว้ท้ายบรรทัด ณ จุดนี้ไม่ใช่แค่เว้นวรรค

วิธีเลือกหลายบรรทัดทั้งหมด:

วิธีหนึ่งคือใช้ปุ่มกลางของเมาส์เพื่อเลือกในแนวตั้งจากนั้นกดปุ่มสิ้นสุดหากเป็นการเลือกขนาดเล็ก

ด้วยปุ่มลัด:

  1. CTRL-A (เลือกทั้งหมด)
  2. CTRL-SHIFT-L (วางเคอร์เซอร์บนทุกบรรทัดที่เลือก)
  3. END (ไปที่ท้ายบรรทัด)

คุณยังสามารถใช้ฟังก์ชันค้นหาเพื่อค้นหาสิ่งที่จะอยู่ในทุกบรรทัดเช่นอักขระเว้นวรรค:

  1. \ s (ใช้ regex)
  2. คลิกค้นหาทั้งหมด
  3. กดปุ่ม "End" เพื่อรับเคอร์เซอร์หลายตัวที่ท้ายแต่ละบรรทัด

ข้อความตัวอย่าง:

text and number     44  more text and a space  
text and number 44  more text and 2 tabs        
text and number 44  more text and no space or tab

text and number 44  more text after a line feed

2
หมายเหตุ: หากต้องการเน้นทุกบรรทัดด้วยมัลติเคอร์เซอร์ในตำแหน่งสุดท้ายคุณสามารถใช้ CTRL + A ตามด้วย CTRL + SHIFT + L ตามด้วย END
Richard Marskell - Drackir

2
การใช้เทคนิคนี้กับชุดข้อมูลอื่นฉันพบว่ามันไม่สมบูรณ์แบบ Sublime Text จะเน้นอักขระพิเศษเช่น) และ + พร้อมกับเว้นวรรคต่อท้าย โปรดใช้ความระมัดระวังหากข้อมูลบางส่วนลงท้ายด้วยอักขระพิเศษ
shanemgrey

2
นอกจากนี้ FYI \sใน regex ไม่เพียง แต่จับคู่อักขระช่องว่างเท่านั้น แต่ยังรวมถึงแท็บและบรรทัดใหม่ (เช่น "ช่องว่าง") ไม่ใช่แค่ช่องว่าง :)
Richard Marskell - Drackir

13

ฉันพบวิญญาณที่นี่: http://www.sublimetext.com/forum/viewtopic.php?f=4&t=4958

คุณสามารถปรับเปลี่ยนแพ็คเกจ

trim_trailing_white_space.py

อยู่ในไดเร็กทอรีแพ็กเกจเริ่มต้นด้วยวิธีนี้:

import sublime, sublime_plugin

def trim_trailing_white_space(view):
    trailing_white_space = view.find_all("[\t ]+$")
    trailing_white_space.reverse()
    edit = view.begin_edit()
    for r in trailing_white_space:
        view.erase(edit, r)
    view.end_edit(edit)

class TrimTrailingWhiteSpaceCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        trim_trailing_white_space(self.view)

class TrimTrailingWhiteSpace(sublime_plugin.EventListener):
    def on_pre_save(self, view):
        if view.settings().get("trim_trailing_white_space_on_save") == True:
            trim_trailing_white_space(view)

class EnsureNewlineAtEof(sublime_plugin.EventListener):
    def on_pre_save(self, view):
        if view.settings().get("ensure_newline_at_eof_on_save") == True:
            if view.size() > 0 and view.substr(view.size() - 1) != '\n':
                edit = view.begin_edit()
                view.insert(edit, view.size(), "\n")
                view.end_edit(edit)

ตอนนี้คุณสามารถเพิ่มคำสั่งในการกำหนดค่าคีย์แมปของคุณ:

{ "keys": ["your_shortcut"], "command": "trim_trailing_white_space" }

ทางออกที่ดีที่สุดสำหรับฉันฉันไม่ต้องการเพิ่มปลั๊กอินเพียงแค่ทำสิ่งนี้ ขอบคุณ.
puro_nervio

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