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.

José Luis
quelle
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" }
Sridhar Katakam
quelle
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
Jason Gefälligkeiten
quelle
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

Antou
quelle
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
Shanemgrey
quelle
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" }
Riccardo Marotti
quelle
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