Sublime Text 2: Coupez les espaces blancs de fin à la demande

99

Je sais que Sublime Text 2 peut supprimer l'espace blanc de fin sur les fichiers lors de l'enregistrement.

Lorsque vous travaillez en équipe et que vous validez une modification dans un fichier, cela a tendance à produire d'énormes différences qui rendent l'examen du code par les pairs plus fastidieux. Pour cette raison, je préfère ne faire le nettoyage des espaces blancs que lorsque je commets d'énormes modifications dans un fichier de toute façon et laisser les espaces tels quels pour les modifications mineures.

Je voudrais savoir s'il existe une commande pour exécuter le rognage de l'espace blanc à la demande sur un fichier, autre que "Activate trimming on save > Save file > Deactivate trimming".

La recherche dans la documentation et sur stackoverflow n'a rien montré de pertinent, tous les liens semblent parler du découpage automatique lors de l'enregistrement.

José Luis
la source
1
Cela ne répond pas directement à votre question, mais cela peut aider si vous utilisez Git pour le contrôle de version: $ mv .git/hooks/pre-commit.sample .git/hooks/pre-commitce que j'ai obtenu de ce blog .
Paul Fioravanti
97
Pour les autres Googleurs: la méthode non à la demande consiste à ajouter ce paramètre:"trim_trailing_white_space_on_save": true
Nate Glenn
3
En tant qu'amélioration du commentaire de @Nate Glenn, notez que couper les espaces blancs de Markdown pourrait vous causer des ennuis, surtout si vous coupez l'espace blanc intentionnel de quelqu'un d'autre et que vous le validez sans le remarquer. Vous pouvez modifier Markdown.sublime-settingset désactiver la coupe globale lors de l'enregistrement et éviter les accidents.
tehfoo
IMPORTANT: S'il y a plus d'une ligne entre les accolades {}, assurez-vous de mettre un ',' sur la ligne ci-dessus ou vous obtiendrez une erreur lorsque vous essayez d'enregistrer.
slindsey3000
1
"Lorsque vous travaillez en équipe et que vous validez une modification dans un fichier, cela a tendance à produire d'énormes différences qui rendent l'examen du code par les pairs plus fastidieux." idéalement - précisément parce qu'il crée le genre de taches sales auxquelles vous faites allusion. Bannissez les espaces blancs de fin dans vos normes de codage et interceptez les commits avec des espaces blancs défectueux dans vos hooks linter / commit.
Frank Farmer

Réponses:

71

Attention: l'utilisation de ce plugin ralentit considérablement Sublime Text

J'utilise le plugin TrailingSpaces pour cela.

Mettez en surbrillance les espaces de fin et supprimez-les en un éclair.

ST2 fournit un moyen de supprimer automatiquement les espaces de fin lors de l'enregistrement du fichier. En fonction de vos paramètres, il peut être plus pratique de simplement les mettre en évidence et / ou de les supprimer à la main. Ce plugin fournit exactement cela!

Utilisation: cliquez sur "Modifier / Espaces de fin / Supprimer".

Pour ajouter une liaison de clé, ouvrez "Préférences / Liaisons de touches - Utilisateur" et ajoutez:

{ "keys": ["ctrl+alt+t"], "command": "delete_trailing_spaces" }
Sridhar Katakam
la source
1
Ouais, j'aime cette réponse la meilleure ... mise à niveau en toute sécurité + fonctionne juste - merci
Rob
1
J'ai remarqué que la fonction ctrl + F pour trouver des mots devient lente après avoir installé ce plugin donc je l'ai supprimé, pouvez-vous me dire si la même situation vous arrive?.
dennisbot
Ctrl + Maj + T est déjà utilisé pour ouvrir le dernier onglet fermé dans Sublime. Je préfère donc Ctrl + Alt + T
Pawel
5
Il existe une option appelée trailing_spaces_trim_on_save, que vous pouvez définir truedans Preferences > Package Settings > Trailing Spaces > Settings - User. Vous pouvez utiliser ceci au lieu de lier un raccourci clavier, je trouve que c'est mieux pour mes besoins
dspacejs
Attention: le défilement des gros fichiers devient nettement plus lent avec ce plugin installé.
compie le
67

J'utilise ces étapes pour une solution rapide à la demande dans Sublime Text:

  1. Rechercher> Remplacer ...
  2. Trouver quoi: [ \t]+\n
  3. Remplacer par: \n
  4. Remplace tout

Vous pouvez également le faire pour un grand nombre de fichiers via

  1. Rechercher> Rechercher dans les fichiers ...
  2. Trouver: [ \t]+\n
  3. Où:
  4. Remplacer: \n
  5. Remplacer
Jason Favors
la source
5
Cette méthode fonctionne pour toutes les lignes sauf la dernière.
Joncom
1
@Joncom a raison sur la dernière ligne. Dans Sublime Text 3, \tne semble pas correspondre aux espaces, donc la réponse telle qu'elle est écrite ne supprime que les onglets de fin. Je pense que je préfère \s+\n, mais notez que cela supprime également les lignes vides. Si vous voulez supprimer les espaces sur la dernière ligne et vous pouvez ajouter \s+\zcomme ceci: (\s+\n|\s+\z).
canhascodez le
3
([\t ]+\n|\s+\z)<- ne supprime pas les lignes vides.
canhascodez le
4
Le regex correct devrait être [ \t]+$et le remplacer par rien.
Codesmith
27

Vous pouvez simplement utiliser une expression régulière pour supprimer les espaces de fin:

  1. Rechercher> Remplacer ...
  2. Trouver quoi: [^\S\r\n]+$
  3. Remplacer par: laisser vide.
  4. Cliquez sur "Tout remplacer"

[^\S\r\n]+$est Regex pour "au moins un caractère d'espacement (donc des espaces et des tabulations mais pas des retours à la ligne, en utilisant une double négation) suivi de la fin de la ligne"

L'expression régulière doit être activée: Activer l'expression régulière dans la boîte de dialogue de recherche

antou
la source
22

Voici un moyen très simple qui n'utilise ni plugins ni paramètres et fonctionne dans la plupart des situations.

  1. Multi-Select et déplacer le curseur à la fin de chaque ligne
  2. Maintenez CTRL-Shift, appuyez à gauche, à droite
  3. Les espaces et les tabulations à la fin des lignes doivent maintenant être sélectionnés. Appuyez sur Supprimer ou Retour arrière

    Remarque - Des caractères spéciaux tels que (et + peuvent également être sélectionnés à la fin de la ligne à ce stade, pas seulement des espaces.

Comment multi-sélectionner toutes les lignes:

Une façon est d'utiliser la touche centrale de la souris pour sélectionner verticalement, puis appuyez sur la touche de fin s'il s'agit d'une petite sélection.

Avec les raccourcis clavier:

  1. CTRL-A (tout sélectionner)
  2. CTRL-SHIFT-L (placer le curseur sur toutes les lignes sélectionnées)
  3. FIN (Aller à la fin des lignes)

Vous pouvez également utiliser la fonction find pour trouver quelque chose qui sera dans chaque ligne, comme le caractère espace:

  1. \ s (en utilisant regex)
  2. Cliquez sur Rechercher tout
  3. Appuyez sur la touche "Fin" pour obtenir plusieurs curseurs à la fin de chaque ligne

Exemple de texte:

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
la source
2
Remarque: pour mettre en surbrillance toutes les lignes avec le multi-curseur en dernière position, vous pouvez utiliser CTRL + A suivi de CTRL + SHIFT + L suivi de END.
Richard Marskell - Drackir
2
En utilisant cette technique sur d'autres ensembles de données, j'ai trouvé qu'elle n'était pas parfaite. Sublime Text mettra également en évidence les caractères spéciaux tels que) et + avec les espaces de fin. Faites attention si certaines des données se terminent par des caractères spéciaux.
shanemgrey
2
En outre, FYI \sdans regex ne correspond pas seulement au caractère espace, mais aussi aux tabulations et aux nouvelles lignes (c'est-à-dire "espace blanc") et pas seulement aux espaces. :)
Richard Marskell - Drackir
13

J'ai trouvé une soulution ici: http://www.sublimetext.com/forum/viewtopic.php?f=4&t=4958

Vous pouvez modifier le package

trim_trailing_white_space.py

situé dans le répertoire des packages par défaut, de cette façon:

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)

Vous pouvez maintenant ajouter la commande à votre configuration de keymap:

{ "keys": ["your_shortcut"], "command": "trim_trailing_white_space" }
Riccardo Marotti
la source
La meilleure solution pour moi, je ne veux pas ajouter de plugin pour simplement faire cela. Merci.
puro_nervio
Pour moi, c'est la solution parfaite, Thx
Vikrame