Wysublimowany tekst 2: przycinaj końcowe białe znaki na żądanie

99

Wiem, że Sublime Text 2 może usunąć końcowe białe znaki na plikach po ich zapisaniu.

Podczas pracy w zespole i zatwierdzania zmiany w pliku powoduje to zwykle powstawanie ogromnych różnic, które sprawiają, że wzajemne sprawdzanie kodu jest bardziej uciążliwe. Z tego powodu wolę czyścić białe miejsca tylko wtedy, gdy i tak zatwierdzam duże zmiany w pliku i zostawiam białe znaki tak, jak ma to miejsce w przypadku drobnych zmian.

Chciałbym wiedzieć, czy istnieje jakieś polecenie do przycinania białego miejsca na żądanie w pliku, inne niż "Activate trimming on save > Save file > Deactivate trimming".

Wyszukiwanie w dokumentacji i przepływie stosu nie pokazało nic istotnego, wszystkie linki wydają się mówić o automatycznym przycinaniu podczas zapisywania.

Jose Luis
źródło
1
To nie jest bezpośrednią odpowiedzią na twoje pytanie, ale może pomóc, jeśli używasz Gita do kontroli wersji: $ mv .git/hooks/pre-commit.sample .git/hooks/pre-commitco otrzymałem z tego bloga .
Paul Fioravanti,
97
Dla innych pracowników Google: sposobem nie na żądanie jest dodanie tego ustawienia:"trim_trailing_white_space_on_save": true
Nate Glenn
3
Jako ulepszenie komentarza @Nate Glenn, zwróć uwagę, że przycinanie białych znaków z Markdown może sprawić ci kłopoty, szczególnie jeśli przycinasz umyślną białą przestrzeń innej osoby i zatwierdzasz to bez zauważania. Możesz edytować Markdown.sublime-settingsi wyłączać globalne przycinanie podczas zapisywania i zapobiegać wpadkom.
tehfoo
WAŻNE: Jeśli między nawiasami {} jest więcej niż 1 linia, upewnij się, że w powyższym wierszu znajduje się znak „,”, w przeciwnym razie podczas próby zapisania wystąpi błąd.
slindsey3000
1
„Podczas pracy w zespole i zatwierdzania zmiany w pliku powoduje to zwykle powstawanie ogromnych różnic, które utrudniają wzajemne przeglądanie kodu”. Głębszym problemem jest to, że zatwierdzenia z końcowymi białymi znakami nie powinny przede wszystkim umieszczać ich w repozytorium, idealnie - właśnie dlatego, że tworzy rodzaj brudnych plam, do których nawiązujesz. Zablokuj końcowe białe spacje w swoich standardach kodowania i przechwytuj zatwierdzenia ze złymi białymi znakami w hakach linter / commit.
Frank Farmer

Odpowiedzi:

71

Uwaga: użycie tej wtyczki znacznie spowalnia Sublime Text

Używam do tego wtyczki TrailingSpaces .

Podświetl końcowe spacje i usuń je w mgnieniu oka.

ST2 zapewnia sposób automatycznego usuwania spacji końcowych po zapisaniu pliku. W zależności od ustawień wygodniejsze może być po prostu ich zaznaczenie i / lub usunięcie ręcznie. Ta wtyczka zapewnia właśnie to!

Sposób użycia: kliknij „Edytuj / Spacje końcowe / Usuń”.

Aby dodać powiązanie klawiszowe, otwórz „Preferencje / Wiązania klawiszy - użytkownik” i dodaj:

{ "keys": ["ctrl+alt+t"], "command": "delete_trailing_spaces" }
Sridhar Katakam
źródło
1
Tak, podoba mi się ta odpowiedź najbardziej ... bezpieczna aktualizacja + po prostu działa - dzięki
Rob,
1
Zauważyłem, że funkcja ctrl + F do znajdowania słów działa wolno po zainstalowaniu tej wtyczki, więc ją usunąłem, czy możesz mi powiedzieć, czy ta sama sytuacja się przytrafiła?
dennisbot
Ctrl + Shift + T służy do otwierania ostatniej zamkniętej karty już w Sublime. Więc wolę Ctrl + Alt + T
Paweł
5
Istnieje opcja nazywa trailing_spaces_trim_on_save, które można ustawić truew Preferences > Package Settings > Trailing Spaces > Settings - User. Możesz użyć tego zamiast wiązania skrótu klawiaturowego, uważam, że jest lepszy dla moich potrzeb
dspacejs
Ostrzeżenie: przewijanie dużych plików staje się znacznie wolniejsze po zainstalowaniu tej wtyczki.
compie
67

Używam tych kroków do szybkiego rozwiązania na żądanie w Sublime Text:

  1. Znajdź> Zamień ...
  2. Znajdź co: [ \t]+\n
  3. Zamienić: \n
  4. Zamień wszystko

Możesz to również zrobić dla dużego zestawu plików za pośrednictwem

  1. Znajdź> Znajdź w plikach ...
  2. Odnaleźć: [ \t]+\n
  3. Gdzie:
  4. Zastąpić: \n
  5. Zastąpić
Jason Favours
źródło
5
Ta metoda działa dla wszystkich linii z wyjątkiem ostatniej.
Joncom
1
@Joncom ma rację co do ostatniej linii. W Sublime Text 3 \twydaje się , że nie pasuje do spacji, więc napisana odpowiedź usuwa tylko końcowe tabulatory. Myślę, że wolę \s+\n, ale zauważ, że usuwa również puste wiersze. Jeśli chcesz usunąć spacje na końcowej linii, jak również można dodać \s+\zjako tak: (\s+\n|\s+\z).
canhascodez
3
([\t ]+\n|\s+\z)<- nie usuwa pustych linii.
canhascodez
4
Powinien być prawidłowy regex [ \t]+$i zastąpić go niczym.
Codesmith,
27

Możesz po prostu użyć wyrażenia regularnego, aby usunąć końcowe spacje:

  1. Znajdź> Zamień ...
  2. Znajdź co: [^\S\r\n]+$
  3. Zamień na: pozostaw puste.
  4. Kliknij „Zamień wszystko”

[^\S\r\n]+$to Regex oznacza „co najmniej jeden biały znak (czyli spacje i tabulatory, ale nie znaki nowej linii, używając podwójnej negacji), po którym następuje koniec wiersza”

Wyrażenie regularne musi być włączone: Włącz wyrażenie regularne to okno wyszukiwania

antou
źródło
22

Oto bardzo prosty sposób, który nie wykorzystuje wtyczek ani ustawień i działa w większości sytuacji.

  1. Multi-Select i przesuń kursor na koniec każdego wiersza
  2. Przytrzymaj CTRL-Shift, naciśnij Lewo, Prawo
  3. Teraz należy zaznaczyć spacje i tabulatory na końcu wierszy. Naciśnij klawisz Delete lub Backspace

    Uwaga - w tym miejscu można również wybrać znaki specjalne, takie jak (i ​​+) na końcu linii, a nie tylko spacje.

Jak zaznaczyć wszystkie linie:

Jednym ze sposobów jest użycie środkowego klawisza myszy do wybrania w pionie, a następnie naciśnięcie klawisza zakończenia, jeśli jest to mały wybór.

Z klawiszami skrótu:

  1. CTRL-A (zaznacz wszystko)
  2. CTRL-SHIFT-L (umieść kursor na wszystkich wybranych liniach)
  3. END (Idź do końca wierszy)

Możesz także użyć funkcji wyszukiwania, aby znaleźć coś, co będzie w każdym wierszu, na przykład znak spacji:

  1. \ s (używając wyrażenia regularnego)
  2. Kliknij Znajdź wszystko
  3. Naciśnij klawisz „End”, aby uzyskać wiele kursorów na końcu każdej linii

Przykładowy tekst:

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
shanemgrey
źródło
2
Uwaga: Aby podświetlić wszystkie linie z multi-kursorem na ostatniej pozycji, możesz użyć CTRL + A, a następnie CTRL + SHIFT + L, a następnie END.
Richard Marskell - Drackir
2
Używając tej techniki w innych zbiorach danych, stwierdziłem, że nie jest ona doskonała. Sublime Text wyróżni również znaki specjalne, takie jak) i + wraz ze spacjami końcowymi. Uważaj, jeśli niektóre dane kończą się znakami specjalnymi.
shanemgrey
2
Ponadto FYI \sw wyrażeniu regularnym nie tylko dopasowuje spację, ale także tabulatory i nowe linie (tj. „Białe znaki”), a nie tylko spacje. :)
Richard Marskell - Drackir 24.07.13
13

Znalazłem tutaj soulution: http://www.sublimetext.com/forum/viewtopic.php?f=4&t=4958

Możesz zmodyfikować pakiet

trim_trailing_white_space.py

znajduje się w domyślnym katalogu pakietów, w ten sposób:

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)

Teraz możesz dodać polecenie do konfiguracji mapy klawiszy:

{ "keys": ["your_shortcut"], "command": "trim_trailing_white_space" }
Riccardo Marotti
źródło
Najlepsze rozwiązanie dla mnie, nie chcę dodawać wtyczek, po prostu zrób to. Dzięki.
puro_nervio
Dla mnie jest to idealne rozwiązanie, Thx
Vikrame,