Erhabener Text 2: Trimmen Sie nach Bedarf Leerzeichen


99

Ich weiß, dass Sublime Text 2 beim Speichern den nachgestellten Leerraum in Dateien löschen kann.

Wenn Sie in einem Team arbeiten und eine Änderung an einer Datei vornehmen, führt dies tendenziell zu großen Unterschieden, die die Überprüfung von Peer-Code umständlicher machen. Aus diesem Grund ziehe ich es vor, die Leerraumbereinigung nur dann durchzuführen, wenn ich ohnehin große Änderungen an einer Datei festschreibe, und lasse Leerzeichen wie bei den geringfügigen Änderungen.

Ich würde gerne wissen, ob es einen Befehl zum Ausführen des Zuschneidens des Leerraums bei Bedarf in einer Datei gibt, außer "Activate trimming on save > Save file > Deactivate trimming".

Die Suche in der Dokumentation und im Stackoverflow ergab nichts Relevantes. Alle Links scheinen über das automatische Trimmen beim Speichern zu sprechen.


1
Dies beantwortet Ihre Frage nicht direkt, aber es kann hilfreich sein, wenn Sie Git zur Versionskontrolle verwenden: $ mv .git/hooks/pre-commit.sample .git/hooks/pre-commitwas ich von diesem Blog erhalten habe .
Paul Fioravanti

97
Für andere Googler: Der nicht bedarfsgesteuerte Weg besteht darin, diese Einstellung hinzuzufügen:"trim_trailing_white_space_on_save": true
Nate Glenn

3
Beachten Sie als Verbesserung für den Kommentar von @Nate Glenn, dass das Trimmen von Leerzeichen von Markdown zu Problemen führen kann, insbesondere wenn Sie den absichtlichen Leerraum einer anderen Person kürzen und ihn unbemerkt festschreiben. Sie können Markdown.sublime-settingsdie globale Trimmung beim Speichern bearbeiten und deaktivieren und Pannen verhindern.
Tehfoo

WICHTIG: Wenn sich zwischen den {} Klammern mehr als eine Zeile befindet, stellen Sie sicher, dass Sie in der obigen Zeile ein ',' einfügen. Andernfalls wird beim Speichern eine Fehlermeldung angezeigt.
Slindsey3000

1
"Wenn Sie in einem Team arbeiten und eine Änderung an einer Datei vornehmen, führt dies tendenziell zu großen Unterschieden, die die Überprüfung von Peer-Code umständlicher machen." im Idealfall - gerade weil es die Art von schmutzigen Flecken erzeugt, auf die Sie anspielen. Verbieten Sie nachgestellte Leerzeichen in Ihren Codierungsstandards und fangen Sie Commits mit schlechten Leerzeichen in Ihren Linter / Commit-Hooks ab.
Frank Farmer

Antworten:


71

Achtung: Durch die Verwendung dieses Plugins wird Sublime Text erheblich langsamer

Ich benutze dafür das TrailingSpaces Plugin.

Markieren Sie nachfolgende Leerzeichen und löschen Sie sie blitzschnell.

ST2 bietet eine Möglichkeit, nachgestellte Leerzeichen beim Speichern von Dateien automatisch zu löschen. Abhängig von Ihren Einstellungen kann es praktischer sein, sie einfach hervorzuheben und / oder von Hand zu löschen. Dieses Plugin bietet genau das!

Verwendung: Klicken Sie auf "Bearbeiten / Nachgestellte Leerzeichen / Löschen".

Um eine Schlüsselbindung hinzuzufügen, öffnen Sie "Einstellungen / Schlüsselbindungen - Benutzer" und fügen Sie hinzu:

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

1
Ja, ich mag diese Antwort am besten ... Upgrade sicher + funktioniert einfach - danke
Rob

1
Ich habe festgestellt, dass die Strg + F-Funktion zum Suchen von Wörtern nach der Installation dieses Plugins langsam wird, sodass ich es entfernt habe. Können Sie mir sagen, ob Ihnen dieselbe Situation passiert?
Dennisbot

Strg + Umschalt + T wird verwendet, um die zuletzt geschlossene Registerkarte in Sublime bereits zu öffnen. Also bevorzuge ich Strg + Alt + T
Pawel

5
Es gibt eine Option genannt trailing_spaces_trim_on_save, die Sie einstellen können truein Preferences > Package Settings > Trailing Spaces > Settings - User. Sie können dies verwenden, anstatt eine Tastenkombination zu binden. Ich finde es besser für meine Bedürfnisse
dspacejs

Warnung: Das Scrollen durch große Dateien wird mit diesem installierten Plugin erheblich langsamer.
Compie

66

Ich verwende diese Schritte für eine schnelle On-Demand-Lösung in Sublime Text:

  1. Suchen> Ersetzen ...
  2. Finde was: [ \t]+\n
  3. Ersetzen mit: \n
  4. Alles ersetzen

Sie können dies auch für eine große Anzahl von Dateien über tun

  1. Suchen> In Dateien suchen ...
  2. Finden: [ \t]+\n
  3. Wo:
  4. Ersetzen: \n
  5. Ersetzen

5
Diese Methode funktioniert für alle Zeilen außer der letzten.
Joncom

1
@ Joncom ist in Bezug auf die letzte Zeile korrekt. In Sublime Text 3 \tscheint es nicht mit Leerzeichen übereinzustimmen, sodass die geschriebene Antwort nur nachfolgende Tabulatoren entfernt. Ich denke, ich bevorzuge \s+\n, aber beachte, dass es auch leere Zeilen löscht. Wenn Sie auch Leerzeichen in der letzten Zeile entfernen möchten, können Sie Folgendes hinzufügen \s+\z: (\s+\n|\s+\z).
Canhascodez

3
([\t ]+\n|\s+\z)<- entfernt keine Leerzeilen.
Canhascodez

4
Die richtige Regex sollte sein [ \t]+$und durch nichts ersetzen.
Codesmith

27

Sie können einfach einen regulären Ausdruck verwenden, um nachgestellte Leerzeichen zu entfernen:

  1. Suchen> Ersetzen ...
  2. Finde was: [^\S\r\n]+$
  3. Ersetzen durch: leer lassen.
  4. Klicken Sie auf "Alle ersetzen".

[^\S\r\n]+$ist Regex für "mindestens ein Leerzeichen (also Leerzeichen und Tabulatoren, aber keine Zeilenumbrüche, mit doppelter Negation), gefolgt vom Zeilenende"

Regulärer Ausdruck muss aktiviert sein: Regex aktivieren ist Suchdialog


22

Hier ist eine supereinfache Methode, die keine Plugins oder Einstellungen verwendet und in den meisten Situationen funktioniert.

  1. Mehrfachauswahl und bewegen Sie den Cursor an das Ende jeder Zeile
  2. Halten Sie die STRG-Umschalttaste gedrückt und drücken Sie links und rechts
  3. Die Leerzeichen und Tabulatoren am Ende der Zeilen sollten jetzt ausgewählt werden. Drücken Sie Entf oder Rücktaste

    Hinweis - An dieser Stelle können auch Sonderzeichen wie (und + am Ende der Zeile ausgewählt werden, nicht nur Leerzeichen.

So wählen Sie alle Zeilen mehrfach aus:

Eine Möglichkeit besteht darin, mit der mittleren Maustaste vertikal auszuwählen und dann die End-Taste zu drücken, wenn es sich um eine kleine Auswahl handelt.

Mit Hotkeys:

  1. STRG-A (alle auswählen)
  2. STRG-UMSCHALT-L (Cursor auf alle ausgewählten Zeilen setzen)
  3. ENDE (Zum Zeilenende gehen)

Sie können auch die Suchfunktion verwenden, um etwas zu finden, das sich in jeder Zeile befindet, z. B. das Leerzeichen:

  1. \ s (mit Regex)
  2. Klicken Sie auf Alle finden
  3. Drücken Sie die Taste "Ende", um am Ende jeder Zeile mehrere Cursor zu erhalten

Beispieltext:

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
Hinweis: Um alle Zeilen mit dem Multi-Cursor an der letzten Position hervorzuheben, können Sie STRG + A gefolgt von STRG + UMSCHALT + L gefolgt von ENDE verwenden.
Richard Marskell - Drackir

2
Bei Verwendung dieser Technik bei anderen Datensätzen habe ich festgestellt, dass sie nicht perfekt ist. Sublime Text hebt auch Sonderzeichen wie) und + sowie nachgestellte Leerzeichen hervor. Seien Sie vorsichtig, wenn einige Daten mit Sonderzeichen enden.
Shanemgrey

2
Außerdem entspricht FYI \sin Regex nicht nur dem Leerzeichen, sondern auch Tabulatoren und neuen Zeilen (dh "Leerzeichen"), nicht nur Leerzeichen. :)
Richard Marskell - Drackir

13

Ich habe hier eine Soulution gefunden: http://www.sublimetext.com/forum/viewtopic.php?f=4&t=4958

Sie können das Paket ändern

trim_trailing_white_space.py

befindet sich im Standardverpackungsverzeichnis auf folgende Weise:

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)

Jetzt können Sie den Befehl zu Ihrer Keymap-Konfiguration hinzufügen:

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

Die beste Lösung für mich, ich möchte kein Plugin hinzufügen, um dies einfach zu tun. Vielen Dank.
puro_nervio

Für mich ist dies die perfekte Lösung, Thx
Vikrame
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.