Sublime Text 2: Taglia lo spazio bianco finale su richiesta


99

So che Sublime Text 2 può eliminare lo spazio bianco finale sui file al momento del salvataggio.

Quando si lavora in un team e si impegna una modifica a un file, ciò tende a produrre differenze enormi che rendono la revisione del codice peer più complicata. Per questo motivo preferisco eseguire la pulizia degli spazi bianchi solo quando impongo comunque modifiche enormi a un file e lasciare gli spazi vuoti così come sono per le modifiche minori.

Vorrei sapere se esiste un comando per eseguire il taglio dello spazio bianco su richiesta su un file, diverso da "Activate trimming on save > Save file > Deactivate trimming".

La ricerca nella documentazione e su stackoverflow non ha mostrato nulla di rilevante, tutti i collegamenti sembrano parlare del taglio automatico al salvataggio.


1
Questo non risponde direttamente alla tua domanda, ma può essere utile se stai usando Git per il controllo della versione: $ mv .git/hooks/pre-commit.sample .git/hooks/pre-commitche ho ottenuto da questo blog .
Paul Fioravanti

97
Per i colleghi googler: il modo non ondemand è aggiungere questa impostazione:"trim_trailing_white_space_on_save": true
Nate Glenn

3
Come miglioramento per il commento di @Nate Glenn, nota che tagliare gli spazi bianchi da Markdown potrebbe metterti nei guai, specialmente se tagli lo spazio bianco intenzionale di qualcun altro e lo commetti senza accorgertene. È possibile modificare Markdown.sublime-settingse disabilitare il taglio globale al salvataggio e prevenire incidenti.
tehfoo

IMPORTANTE: se c'è più di 1 riga tra le parentesi graffe {} assicurati di mettere un "," sulla riga sopra o riceverai un errore quando proverai a salvare.
slindsey3000

1
"Quando si lavora in un team e si effettua il commit di una modifica a un file, questo tende a produrre differenze enormi che rendono la revisione del codice peer più complicata" Il problema più profondo qui è l'impegno con gli spazi vuoti finali non dovrebbe essere inserito nel repository in primo luogo, idealmente, proprio perché crea il tipo di macchie sporche a cui alludi. Escludi gli spazi vuoti finali nei tuoi standard di codifica e cattura i commit con spazi vuoti non validi nei tuoi hook di linter / commit.
Frank Farmer

Risposte:


71

Attenzione: l'utilizzo di questo plugin rende Sublime Text molto più lento

Uso il plugin TrailingSpaces per questo.

Evidenzia gli spazi finali e cancellali in un lampo.

ST2 fornisce un modo per eliminare automaticamente gli spazi finali al salvataggio del file. A seconda delle impostazioni, potrebbe essere più utile evidenziarle e / o eliminarle manualmente. Questo plugin fornisce proprio questo!

Utilizzo: fare clic su "Modifica / Spazi finali / Elimina".

Per aggiungere un'associazione di tasti, apri "Preferenze / Associazioni di tasti - Utente" e aggiungi:

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

1
Sì, mi piace questa risposta la migliore ... aggiornamento sicuro + funziona - grazie
Rob

1
Ho notato che la funzione ctrl + F per trovare le parole diventa lenta dopo aver installato questo plugin, quindi l'ho rimosso, puoi dirmi se ti succede la stessa situazione ?.
dennisbot

Ctrl + Maiusc + T viene utilizzato per aprire già l'ultima scheda chiusa in Sublime. Quindi preferisco Ctrl + Alt + T
Pawel

5
C'è un'opzione chiamata trailing_spaces_trim_on_save, che puoi impostare truein Preferences > Package Settings > Trailing Spaces > Settings - User. Puoi usarlo invece di associare una scorciatoia da tastiera, trovo che sia migliore per le mie esigenze
dspacejs

Attenzione: lo scorrimento di file di grandi dimensioni diventa notevolmente più lento con questo plugin installato.
compie

67

Uso questi passaggi per una rapida soluzione su richiesta all'interno di Sublime Text:

  1. Trova> Sostituisci ...
  2. Trovare cosa: [ \t]+\n
  3. Sostituirlo con: \n
  4. Sostituisci tutto

Puoi anche farlo per un ampio set di file tramite

  1. Trova> Trova nei file ...
  2. Trova: [ \t]+\n
  3. Dove:
  4. Sostituire: \n
  5. Sostituire

5
Questo metodo funziona per tutte le righe tranne l'ultima.
Joncom

1
@ Joncom ha ragione sull'ultima riga. In Sublime Text 3, \tnon sembra corrispondere agli spazi, quindi la risposta come scritta rimuove solo le tabulazioni finali. Penso di preferire \s+\n, ma nota che elimina anche le righe vuote. Se si desidera rimuovere spazi bianchi sulla linea finale così è possibile aggiungere \s+\zcome così: (\s+\n|\s+\z).
canhascodez

3
([\t ]+\n|\s+\z)<- non rimuove le righe vuote.
canhascodez

4
La regex corretta dovrebbe essere [ \t]+$e sostituirla con niente.
Codesmith

27

Puoi semplicemente usare una regex per rimuovere gli spazi vuoti finali:

  1. Trova> Sostituisci ...
  2. Trovare cosa: [^\S\r\n]+$
  3. Sostituisci con: lascia vuoto.
  4. Fare clic su "Sostituisci tutto"

[^\S\r\n]+$è Regex per "almeno un carattere di spazio (quindi spazi e tabulazioni ma non newline, utilizzando una doppia negazione) seguito dalla fine della riga"

L'espressione regolare deve essere abilitata: Abilita regex è la finestra di dialogo di ricerca


22

Ecco un modo semplicissimo che non utilizza plug-in o impostazioni e funziona nella maggior parte delle situazioni.

  1. Selezione multipla e sposta il cursore alla fine di ogni riga
  2. Tieni premuto CTRL-Maiusc, premi Sinistra, Destra
  3. Ora dovrebbero essere selezionati gli spazi e le tabulazioni alla fine delle righe. Premi Canc o Backspace

    Nota - A questo punto possono essere selezionati anche caratteri speciali come (e +) alla fine della riga, non solo spazi.

Come selezionare più righe tutte le linee:

Un modo è usare il tasto centrale del mouse per selezionare verticalmente, quindi premere il tasto Fine se è una piccola selezione.

Con tasti di scelta rapida:

  1. CTRL-A (seleziona tutto)
  2. CTRL-SHIFT-L (posiziona il cursore su tutte le righe selezionate)
  3. END (Vai alla fine delle righe)

Puoi anche usare la funzione trova per trovare qualcosa che sarà in ogni riga, come il carattere spazio:

  1. \ s (utilizzando regex)
  2. Fare clic su Trova tutto
  3. Premere il tasto "Fine" per ottenere più cursori alla fine di ogni riga

Testo di esempio:

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
Nota: per evidenziare tutte le linee con il cursore multiplo nell'ultima posizione è possibile utilizzare CTRL + A seguito da CTRL + MAIUSC + L seguito da FINE.
Richard Marskell - Drackir

2
Utilizzando questa tecnica su altri set di dati ho scoperto che non è perfetto. Sublime Text evidenzierà anche caratteri speciali come) e + insieme agli spazi finali. Fai attenzione se alcuni dati terminano con caratteri speciali.
shanemgrey

2
Inoltre, FYI \sin regex non solo corrisponde al carattere dello spazio, ma anche alle tabulazioni e alle nuove linee (cioè "spazi bianchi") non solo agli spazi. :)
Richard Marskell - Drackir

13

Ho trovato un'anima qui: http://www.sublimetext.com/forum/viewtopic.php?f=4&t=4958

Puoi modificare il pacchetto

trim_trailing_white_space.py

situato nella directory dei pacchetti predefinita, in questo modo:

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)

Ora puoi aggiungere il comando alla configurazione della tua mappa di tasti:

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

La soluzione migliore per me, non voglio aggiungere un plugin per farlo semplicemente. Grazie.
puro_nervio

Per me questa è la soluzione perfetta, Thx
Vikrame
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.