Sublime Text 2: Cắt bỏ khoảng trắng theo yêu cầu


99

Tôi biết rằng Sublime Text 2 có thể xóa khoảng trắng ở cuối tệp khi lưu.

Khi làm việc trong một nhóm và thực hiện thay đổi đối với một tệp, điều này có xu hướng tạo ra sự khác biệt lớn khiến việc xem xét mã ngang hàng trở nên phức tạp hơn. Vì lý do đó, tôi chỉ muốn làm sạch khoảng trắng khi tôi vẫn chấp nhận những thay đổi lớn đối với một tệp và để lại khoảng trắng như dành cho những thay đổi nhỏ.

Tôi muốn biết nếu có bất kỳ lệnh nào để thực hiện việc cắt bớt khoảng trắng theo yêu cầu trên một tệp, ngoại trừ "Activate trimming on save > Save file > Deactivate trimming".

Tìm kiếm trong Tài liệu và trên stackoverflow không hiển thị bất kỳ điều gì liên quan, tất cả các liên kết dường như nói về tính năng tự động cắt khi lưu.


1
Điều này không trực tiếp trả lời câu hỏi của bạn, nhưng nó có thể hữu ích nếu bạn đang sử dụng Git để kiểm soát phiên bản: $ mv .git/hooks/pre-commit.sample .git/hooks/pre-commitcái mà tôi lấy từ blog này .
Paul Fioravanti

97
Đối với nhân viên Google: cách không theo yêu cầu là thêm cài đặt này:"trim_trailing_white_space_on_save": true
Nate Glenn

3
Để nâng cao nhận xét của @Nate Glenn, hãy lưu ý rằng việc cắt bớt khoảng trắng từ Markdown có thể khiến bạn gặp rắc rối, đặc biệt nếu bạn cắt bớt khoảng trắng có chủ ý của người khác và thực hiện nó mà không để ý. Bạn có thể chỉnh sửa Markdown.sublime-settingsvà tắt phần cắt chung khi lưu và ngăn ngừa rủi ro.
tehfoo

QUAN TRỌNG: Nếu có nhiều hơn 1 dòng ở giữa các dấu ngoặc nhọn {}, hãy đảm bảo rằng bạn đặt dấu ',' vào dòng trên, nếu không bạn sẽ gặp lỗi khi cố gắng lưu.
slindsey3000

1
"Khi làm việc theo nhóm và cam kết thay đổi một tệp, điều này có xu hướng tạo ra sự khác biệt lớn khiến việc xem xét mã ngang hàng trở nên cồng kềnh hơn" Vấn đề sâu hơn ở đây là cam kết với khoảng trắng ở cuối sẽ không được đưa vào kho lưu trữ ngay từ đầu, lý tưởng - chính xác là vì nó tạo ra các loại bản vá bẩn mà bạn ám chỉ. Cấm khoảng trắng theo sau trong các tiêu chuẩn mã hóa của bạn và bắt các commit có khoảng trắng xấu trong các móc linter / commit của bạn.
Frank Farmer

Câu trả lời:


71

Lưu ý: sử dụng plugin này làm cho Sublime Text chậm hơn đáng kể

Tôi sử dụng plugin TrailingSpaces cho việc này.

Đánh dấu các khoảng trống ở cuối và xóa chúng trong nháy mắt.

ST2 cung cấp một cách để tự động xóa khoảng trắng ở cuối khi lưu tệp. Tùy thuộc vào cài đặt của bạn, có thể tiện dụng hơn nếu chỉ đánh dấu và / hoặc xóa chúng bằng tay. Plugin này chỉ cung cấp điều đó!

Cách sử dụng: nhấp vào "Chỉnh sửa / Dấu cách dấu vết / Xóa".

Để thêm liên kết khóa, hãy mở "Tùy chọn / Liên kết khóa - Người dùng" và thêm:

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

1
Vâng, tôi thích câu trả lời này nhất ... nâng cấp an toàn + chỉ hoạt động - cảm ơn
Rob

1
Tôi nhận thấy rằng tính năng ctrl + F để tìm từ trở nên chậm hơn sau khi tôi cài đặt plugin này nên tôi đã gỡ bỏ nó, bạn có thể cho tôi biết nếu trường hợp tương tự xảy ra với bạn không ?.
dennisbot,

Ctrl + Shift + T được sử dụng để mở tab đã đóng cuối cùng trong Sublime. Vì vậy, tôi thích Ctrl + Alt + T
Pawel

5
Có một tùy chọn được gọi là trailing_spaces_trim_on_save, bạn có thể đặt trueở đó Preferences > Package Settings > Trailing Spaces > Settings - User. Bạn có thể sử dụng thay vì ràng buộc một phím tắt, tôi thấy nó là tốt hơn cho nhu cầu của tôi
dspacejs

Cảnh báo: việc cuộn qua các tệp lớn trở nên chậm hơn đáng kể khi cài đặt plugin này.
compie 19/07/2016

66

Tôi sử dụng các bước sau để có giải pháp nhanh chóng theo yêu cầu trong Sublime Text:

  1. Tìm> Thay thế ...
  2. Tìm gì: [ \t]+\n
  3. Thay thế bằng: \n
  4. Thay thế tất cả

Bạn cũng có thể làm điều này cho một tập hợp lớn các tệp qua

  1. Tìm> Tìm trong Tệp ...
  2. Tìm thấy: [ \t]+\n
  3. Ở đâu:
  4. Thay thế: \n
  5. Thay thế

5
Phương pháp này hoạt động cho tất cả các dòng ngoại trừ dòng cuối cùng.
Joncom

1
@Joncom là chính xác về dòng cuối cùng. Trong Sublime Text 3, \tdường như không khớp với khoảng trắng, vì vậy câu trả lời như được viết chỉ xóa các tab ở cuối. Tôi nghĩ tôi thích hơn \s+\n, nhưng lưu ý rằng nó cũng xóa các dòng trống. Nếu bạn muốn loại bỏ khoảng trắng trên dòng cuối cùng cũng bạn có thể thêm \s+\znhư vậy: (\s+\n|\s+\z).
canhascodez

3
([\t ]+\n|\s+\z)<- không xóa các dòng trống.
canhascodez

4
Regex chính xác nên có [ \t]+$và thay thế nó bằng không.
Thợ mã

27

Bạn chỉ cần sử dụng regex để xóa các khoảng trắng ở cuối:

  1. Tìm> Thay thế ...
  2. Tìm những gì: [^\S\r\n]+$
  3. Thay thế bằng: để trống.
  4. Nhấp vào 'Thay thế Tất cả'

[^\S\r\n]+$Regex cho "ít nhất một ký tự khoảng trắng (vì vậy dấu cách và tab chứ không phải dòng mới, sử dụng phủ định kép) theo sau là cuối dòng"

Biểu thức chính quy phải được bật: Bật regex là hộp thoại tìm kiếm


22

Đây là một cách cực kỳ đơn giản không sử dụng plugin hoặc cài đặt và hoạt động trong hầu hết các trường hợp.

  1. Chọn nhiều và di chuyển con trỏ đến cuối mỗi dòng
  2. Giữ CTRL-Shift, Nhấn Trái, Phải
  3. Các khoảng trắng và tab ở cuối dòng bây giờ sẽ được chọn. Nhấn Delete hoặc Backspace

    Lưu ý - Các ký tự đặc biệt như (và + cũng có thể được chọn ở cuối dòng tại thời điểm này, không chỉ dấu cách.

Cách chọn nhiều dòng:

Một cách là sử dụng phím chuột giữa để chọn theo chiều dọc, sau đó nhấn Phím Kết thúc nếu đó là một lựa chọn nhỏ.

Với các phím nóng:

  1. CTRL-A (chọn tất cả)
  2. CTRL-SHIFT-L (đặt con trỏ trên tất cả các dòng đã chọn)
  3. KẾT THÚC (Đi đến cuối dòng)

Bạn cũng có thể sử dụng hàm find để tìm thứ gì đó sẽ có trong mỗi dòng, chẳng hạn như ký tự khoảng trắng:

  1. \ s (sử dụng regex)
  2. Nhấp vào Tìm tất cả
  3. Nhấn phím "End" để nhận nhiều con trỏ ở cuối mỗi dòng

Văn bản Mẫu:

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
Lưu ý: Để đánh dấu tất cả các dòng có nhiều con trỏ ở vị trí cuối cùng, bạn có thể sử dụng CTRL + A, sau đó là CTRL + SHIFT + L và END.
Richard Marskell - Drackir

2
Sử dụng kỹ thuật này trên các tập dữ liệu khác, tôi thấy rằng nó không hoàn hảo. Sublime Text cũng sẽ đánh dấu các ký tự đặc biệt như) và + cùng với dấu cách ở cuối. Hãy cẩn thận nếu một số dữ liệu kết thúc bằng các ký tự đặc biệt.
shanemgrey

2
Ngoài ra, FYI \strong regex không chỉ khớp với ký tự khoảng trắng mà còn cả các tab và các dòng mới (tức là "khoảng trắng") không chỉ khớp với khoảng trắng. :)
Richard Marskell - Drackir

13

Tôi đã tìm thấy một linh hồn ở đây: http://www.sublimetext.com/forum/viewtopic.php?f=4&t=4958

Bạn có thể sửa đổi gói

trim_trailing_white_space.py

nằm trong thư mục gói mặc định, theo cách này:

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)

Bây giờ bạn có thể thêm lệnh vào cấu hình sơ đồ bàn phím của mình:

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

Giải pháp tốt nhất cho tôi, tôi không muốn thêm một plugin chỉ để thực hiện việc này. Cảm ơn.
puro_nervio

Đối với tôi đây là giải pháp hoàn hảo, Thx
Vikrame
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.